I believe that C ++ 03 does not guarantee any guarantees of data stability in memory, and this will be an implementation detail (and in fact, this is not something that can be safely assumed without testing).
Note that storing iterators on a map and placing the actual vector in memory are completely different things. The validity of iterators is clearly defined (both in the case when they are valid and when they are not) in the C ++ specification, but the actual internal behavior of the tree is not.
Nevertheless, any worthy compiler (for creating releases / with optimizations enabled) optimizes the implementation so that it does not actually copy the vector when it is moved in the tree, and C ++ 11 std::map
implementations will use moving semantics to guarantee this behavior.
What you cannot imagine is that only internal pointers move.
source share