我是靠谱客的博主 可爱火车,最近开发中收集的这篇文章主要介绍map容器删除元素出现的问题map容器删除元素,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题起因:
在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容器删除元素所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部