If this matters a lot to you because you are saving the iterator for some other reason, then C ++ 0x talks about std::unordered_map (quoting from FDIS) in 23.2.5 / 11:
Members of the insert and emplace should not affect the validity of iterators if (N + n) z * B, where N is the number of elements in the container before the insert operation, n is the number of elements inserted, B is the number of containers bucket, and z is the containers maximum coefficient load.
I have not tested whether the tr1 specification tr1 the same guarantee, but it is logical enough based on the expected implementation.
If you can use this guarantee, you can protect your iterators to a certain point. However, as Mark says, searching in unordered_map should be fast. Storing a key, not an iterator, is worse than storing an index, not an iterator, in vector , but better than the equivalent for map .
source share