在迭代时插入std :: map?

tsc*_*aei 4 c++ stdmap

我有一个地图,我迭代这样:

std::map<unsigned int, GameObject *>::iterator itr = _gameObjects.begin();
    while (itr != _gameObjects.end())
    {
        itr->second->Update();
        itr++;
    }
Run Code Online (Sandbox Code Playgroud)

Update()可能会将一个元素插入到地图中,甚至可以从中删除一个元素,但它不一定会执行这两个元素中的任何一个.它显然不会那样工作.有没有办法可以做到?

hmj*_*mjd 5

来自std::map::erase():

擦除元素的引用和迭代器无效.其他引用和迭代器不受影响.

来自std::map::insert():

没有迭代器或引用无效.

来自std::map::operator[]:

没有迭代器或引用无效.

如果Update()不删除自己,那么代码是合法的.如果Update()是,那就不是.Update()将被要求通知调用代码它是否自行删除,设置标志或返回下一个迭代器(如Attila所建议).