安全地从地图内擦除基于的范围

Safe to erase from map inside range based for?

本文关键字:范围 擦除 地图 安全      更新时间:2023-10-16

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

for( const auto& my_pair: my_map )

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

, 不安全。

my_map.erase( my_pair.first );

这里你用一个键值调用erase,这意味着你将删除所有具有该键值的元素。

当从std::map擦除元素时,这适用于:

对已删除元素的引用和迭代器无效。*

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

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