I have to say that I'm not a specialist in STL or C++ in general but as far as I know an iterator is class mainly consisting of a pointer to the container, the current index and the operator-overloadd-function for ++. So what can you do with a iterator that you can't do with KeyType delegate(KeyType,Container /* which is indexed by KeyType */)