问题起因:
在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值