我有这样的地图定义和后续操作。
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;在擦除其他元素后有效吗?
答案 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)
是的,它会。执行地图擦除时,只有擦除的迭代器无效。