Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

For a unordered_map erase(), I have seen a few threads suggesting different methods for doing it (like getting the next element from the return of erase()). However, I haven't seen anybody suggesting the following. So, I was wondering if there is some issue with this approach:

for (auto it1 = map.begin(); it1 != map.end(); )
{
   auto it2 = it1++; //it2 assigned before it1 incremented
   map.erase(it2);
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
2.3k views
Welcome To Ask or Share your Answers For Others

1 Answer

This approach works fine. std::unordered_map::erase only invalidates the iterator to the erased element (i.e. it2), the aforehand incremented iterator it1 remains valid.

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...