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;
}

程序運行截圖如下:

這個打印是刪除前的打印,刪除後數據如下:

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