我使用此代码从地图容器中删除等于某个 int 的元素。
for(auto x:m){
if((x.second)==element)m.erase(x.first);
}
Run Code Online (Sandbox Code Playgroud)
结果是分段错误。我也试过这个:
for(map<int,int>::iterator i=m.begin();i!=m.end();i++){
if((i->second)==element)m.erase(i);
}
Run Code Online (Sandbox Code Playgroud)
结果一样。如果将 i++ 放入 if/else 程序将冻结/循环或其他什么。我怎样才能解决这个问题?
erase()使for循环使用的迭代器无效。幸运的是,erase()它本身返回一个迭代器到下一个条目,所以正确的循环看起来像这样:
for (map<int,int>::iterator i = m.begin(); i != m.end(); )
{
if (i->second == element)
i = m.erase(i);
else
++i;
}
Run Code Online (Sandbox Code Playgroud)