Prasanth
Prasanth

Reputation: 11

Unordered map erase method storing temporary variable

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

Answers (1)

songyuanyao
songyuanyao

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

Related Questions