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;
}
程序运行截图如下:
这个打印是删除前的打印,删除后数据如下: