删除某个map中某个条目用函数erase()。该成员方法的定义如下:
1.iterator erase(iterator it); //通过一个条目对象删除
2.iterator erase(iterator first, iterator last); //删除一个范围
3.size_type erase(const Key& key); //通过关键字删除
以下主要介绍在遍历map时删除特定元素。
在遍历map过程中删除map元素时,需要先将要删除的迭代器保存下来,然后将用于遍历map的迭代器指向下一个位置,最后删除掉保存下来的迭代器,具体可以参考如下代码。
#include <map>
#include <iostream>
using namespace std;
int main()
{
map<int, int> map1;
map<int, int>::iterator mapit;
map<int, int>::iterator saveit;
map1[1] = 1;
map1[2] = 2;
map1[3] = 3;
map1[4] = 4;
mapit = map1.begin();
while (mapit != map1.end()) {
cout << "Element key: " << mapit->first << ", value: " << mapit->second << endl;
if (mapit->first == 2) {
map1.erase(mapit++);
continue;
}
mapit++;
}
std::cout<<"After delete"<<std::endl;
mapit = map1.begin();
while (mapit != map1.end()) {
cout << "Element key: " << mapit->first << ", value: " << mapit->second << endl;
mapit++;
}
std::cout<<"all over"<<std::endl;
return 0;
}
以上为在linux下遍历map时删除元素的方法。在windows 的STL中,map的erase方法会返回一个iterator,这个iterator指向的是当前被删除的iterator后面的iterator,因此,只需要将用于循环的iterator赋成erase函数的返回值。参考上面代码,将其中的第20行修改为:
mapit = map1.erase(mapit);
参考:
[1] http://www.cnblogs.com/zhoulipeng/p/3432009.html
[2] http://www.oschina.net/question/54100_29316
[3] http://baike.baidu.com/view/4256069.htm#2_3