概述
问题起因:
在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容器删除元素出现的问题map容器删除元素所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复