Reputation: 11
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);
}
Upvotes: 1
Views: 65
Reputation: 172894
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.
Upvotes: 3