gpt4 book ai didi

c++ - 在迭代它的同时插入到 std::map 中?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:26 26 4
gpt4 key购买 nike

我有一个 map ,我可以像这样迭代它:

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

Update() 可能会在 map 中插入一个元素,甚至从中删除一个元素,但它不一定会执行这两者中的任何一个。显然不是那样的。有什么办法可以做到吗?

最佳答案

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

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

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

No iterators or references are invalidated.

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

No iterators or references are invalidated.

如果 Update() 没有自行删除,则该代码是合法的。如果 Update() 有,那么它就没有。 Update() 需要通知调用代码,如果它删除了自身,设置标志或返回下一个迭代器(如 Attila 所建议)。

关于c++ - 在迭代它的同时插入到 std::map 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10706511/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com