簡體   English   中英

在迭代時插入std :: map?

[英]Inserting into std::map while iterating over it?

我有一個地圖,我迭代這樣:

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

Update()可能會將一個元素插入到地圖中,甚至可以從中刪除一個元素,但它不一定會執行這兩個元素中的任何一個。 它顯然不會那樣工作。 有沒有辦法可以做到?

std::map::erase()

擦除元素的引用和迭代器無效。 其他引用和迭代器不受影響。

std::map::insert()

沒有迭代器或引用無效。

來自std::map::operator[]

沒有迭代器或引用無效。

如果Update()沒有刪除自己,那么代碼是合法的。 如果Update()有,那么它不是。 Update()來通知調用代碼它是否自行刪除,設置標志或返回下一個迭代器(如Attila所建議的那樣)。

STL中的erase函數通常會將迭代器返回到下一個有效元素(如果沒有這樣的元素可用,則返回end() )。 您可以從Update返回此迭代器並將其重新分配給itr

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM