问题起因:
在map容器中插入元素后,想要按照key值删除特定的元素
代码如下:
auto it = mp.begin();
for (; it != mp.end(); it++){
if (it->first == 1){
mp.erase(it);
}
}
后来代码直接报错

--------------------------------------------分割线--------------------------------------------
-------------------------------------------正文开始------------------------------------------
map容器删除元素
首先介绍一下在STL库中map容器的erase()函数有三个重载版本
iterator erase(const_iterator _Where)iterator erase(const_iterator _First, const_iterator _Last)size_type erase(const key_type& _Keyval)
其中第一个和第二个重载版本返回的是迭代器。当erase()之后,当前迭代器失效,故进行++操作时就会报错。
解决办法1:
重新用it来接收erase()返回的迭代器,然后进行++操作
auto it = mp.begin();
while(it != mp.end()){
if(it->first == 1){
it = mp.erase(it);
}
else
{
it++;
}
}
解决办法2:
在erase()函数中直接将it++
auto it = mp.begin();
while(it != mp.end()){
if(it->first == 1){
mp.erase(it++);
}
else
{
it++;
}
}
注意:
第一个重载版本传入的是迭代器位置
第二个重载版本传入的是迭代器的起始位置和终止位置
第三个重载版本传入的是key值
最后
以上就是可爱火车最近收集整理的关于map容器删除元素出现的问题map容器删除元素的全部内容,更多相关map容器删除元素出现内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复