STL工作笔记-map中关于erase返回值的操作

目录

 

原理

举个栗子


 

 

原理

这里要注意的是erase的返回值,这个返回值是下一个结点!!!

这里可以直接用原始的it去接就可以了,不用在++啥的。

 

举个栗子

如下代码:

#include <string>
#include <iostream>
#include <map>
#include <algorithm>

using namespace std;

typedef pair<int, string> in_pair;
typedef pair<map<int, string>::iterator, bool> in_pair_bool;

void isInsertSuccessful(in_pair_bool pr){
	
	if(pr.second){

		cout << "insert successful!" << endl;
	}
	else{

		throw "insert failed!";
	}
}

void print(in_pair pr){

	cout << pr.first << "\t" << pr.second << endl;
}

int main(){

	map<int, string> mp;
	map<int, string>::iterator mpIt;
	in_pair_bool pr;

	try{

		pr = mp.insert(in_pair(1, "courage"));
		isInsertSuccessful(pr);
		pr = mp.insert(in_pair(2, "violence"));
		isInsertSuccessful(pr);
		pr = mp.insert(in_pair(3, "brave"));
		isInsertSuccessful(pr);

		for_each(mp.begin(), mp.end(), print);
		//delete one
		mpIt = mp.begin();
		while(mpIt != mp.end()){

			string::size_type idx;
			idx = mpIt->second.find("violence");
			if(idx != string::npos){

				mpIt = mp.erase(mpIt);
			}
			else{

				mpIt++;
			}
		}

		pr = mp.insert(in_pair(3, "YaMiaoDie"));
		isInsertSuccessful(pr);


	}
	catch(const char *str){

		cout << str;
	}

	getchar();
	return 0;
}

程序运行截图如下:

这个打印是删除前的打印,删除后数据如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章