C++ map erase问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ map erase问题相关的知识,希望对你有一定的参考价值。

C++map中用 erase删除完元素,是不是不用好像list那样把删除的iterator重新指向begin或者把返回的值返回给iterator本身呢?
因为我用过cc跟其他编译器编过都没出错
我的代码是这样的
int main()

map<char,int> mymap;
mymap.insert(pair<char,int>('A',10));
mymap.insert(pair<char,int>('B',20));
mymap.insert(pair<char,int>('C',30));

map<char,int>::iterator removeIter = mymap.begin();
while(removeIter!=mymap.end())

if(removeIter->first== 'A' || removeIter->first == 'C')

mymap.erase(removeIter); //use erase to remove the data from map
removeIter = mymap.begin();

removeIter++;

erase返回一个空值,这时候iterator存放的值还是被删除的元素,++后有可能指向被删除前一个元素,有可能指向被删除后一个元素。
测试代码:
#include <string>
#include <map>
#include <stdio.h>
using namespace std;

int main(int argc, char **argv)

map<int,int> mymap;
mymap[1] = 1;
mymap[2] = 2;
mymap[3] = 3;
mymap[4] = 4;
mymap[5] = 3;
mymap[6] = 6;
mymap[7] = 7;
mymap[8] = 3;
mymap[9] = 9;
map<int,int>::iterator it;

printf("----%d\n\n", mymap.size());
for ( it = mymap.begin(), it != mymap.end() )

printf("1****%d--%d\n", it->first, it->second);
if ( 3 == it ->second )
mymap.erase( it->fitst);
printf("1****%d----%d\n", it->first, it->second);
++it;

printf("----%d\n\n", mymap.size());

return 0;
参考技术A int main()

map<char,int> mymap;
mymap.insert(pair<char,int>('A',10));
mymap.insert(pair<char,int>('B',20));
mymap.insert(pair<char,int>('C',30));

map<char,int>::iterator removeIter = mymap.begin();
while(removeIter!=mymap.end())

if(removeIter->first== 'A' || removeIter->first == 'C')

mymap.erase(removeIter++);

C++ map和vector的erase函数说明

一、std::map erase 函数声明

这里首先要注意,C++98 和c++11 针对map的erase函数有不同的函数原型,这往往是出现问题的关键所在。
参考如下链接:
http://www.cplusplus.com/reference/map/map/erase/

C++98

	void erase (iterator position);
	size_type erase (const key_type& k);
	void erase (iterator first, iterator last

以上是关于C++ map erase问题的主要内容,如果未能解决你的问题,请参考以下文章

c++ STL map 中erase()后++会指向那个元素?以及erase后map将会自动做啥操作(也就是会怎么变动)?

[转] C++ STL中map.erase(it++)用法原理解析

C++ for循环中vector和map的erase

C++ for循环中vector和map的erase

C++从入门到入土第二十篇:关联式容器-map和set

C++从入门到入土第二十篇:关联式容器-map和set