可以安全地从基于范围内的地图中删除?

时间:2014-08-11 15:29:52

标签: c++ map foreach range

我经常使用这种语法循环遍历std::map

for( const auto& my_pair: my_map )

我可以安全地致电my_map.erase( my_pair.first );吗?

1 个答案:

答案 0 :(得分:3)

不,安全。

my_map.erase( my_pair.first );

在这里,您使用键值调用erase,这意味着您将删除具有该键值的所有元素。

当从std::map中删除元素时,这适用:

  

擦除元素的引用和迭代器无效。其他引用和迭代器不受影响。*

* http://en.cppreference.com/w/cpp/container/map/erase

因此,增加当前迭代器是不安全的,因为它可能已经失效。