Inserting into std::map while iterating over it?

c++, stdmap

Solution

From `std::map::erase()`:

References and iterators to the erased elements are invalidated. Other references and iterators are not affected.

From `std::map::insert()`:

No iterators or references are invalidated.

From `std::map::operator[]`:

No iterators or references are invalidated.

If `Update()` does not remove itself, then the code is legal. If `Update()` does, then it is not. `Update()` would be required to inform the calling code if it removed itself, either setting a flag or returning the next iterator (as suggested by Attila).

Problem

I have a Map over which I iterate like this: ``` std::map<unsigned int, GameObject *>::iterator itr = _gameObjects.begin(); while (itr != _gameObjects.end()) { itr->second->Update(); itr++; } ``` Update() might insert an element into the map or even remove one from it, but it doesn't necessarily do any of the two. It obviously doesn't work like that. Is there a way it can be done?

Original source