具有有序映射的迭代器有效性

时间:2016-06-01 07:42:26

标签: c++ iterator stdmap

我有这样的地图定义和后续操作。

map<int,string> m;
m.insert(std::pair<int,string>(1,"A");
m.insert(std::pair<int,string>(2,"B");
m.insert(std::pair<int,string>(3,"C");
m.insert(std::pair<int,string>(4,"D");
auto it = m.find(2);
m.erase(m.find(3));
cout<< it->second;

Will&#34; it&#34;在擦除其他元素后有效吗?

2 个答案:

答案 0 :(得分:3)

  

Will&#34; it&#34;在擦除其他元素后有效吗?

是的,std::map::erase只会使擦除元素的引用和迭代器无效。

  

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

请注意,代码m.erase(m.find(3));存在潜在问题,因为如果找不到任何内容,std::map::find将返回end()迭代器,但end()迭代器不能与{{1}一起使用}。

  

迭代器std::map::erase必须有效且可解除引用。因此pos   迭代器(有效但不可解除引用)不能用作   end()的值。

答案 1 :(得分:1)

是的,它会。执行地图擦除时,只有擦除的迭代器无效。