stl中map的四種插入方法總結
方法一:pair
例:
map<int, string> mp;
mp.insert(pair<int,string>(1,"aaaaa"));
方法二:make_pair
例:
map<int, string> mp;
mp.insert(make_pair<int,string>(2,"bbbbb"));
方法三:value_type
例:
map<int, string> mp;
mp.insert(map<int, string>::value_type(3,"ccccc"));
方法四:[]
例:
map<int, string> mp;
mp[4] = "ddddd";
四種方法異同:
前三種方法當出現重復鍵時,編譯器會報錯,而第四種方法,當鍵重復時,會覆蓋掉之前的鍵值對。
綜合測試:
#include<iostream> #include<map> using namespace std; int main() { map<int, string> mp; //map的插入方法有4種 //insert返回值為pair 原型:typedef pair<iterator, bool> _Pairib //方法1.pair 在插入重復鍵的情況下前三種方法類似,這里只測試第一種 pair<map<int,string>::iterator, bool> pair1 = mp.insert(pair<int,string>(1,"aaaaa11111")); if (pair1.second == true) { cout<< "插入成功" <<endl; } else { cout<< "插入失敗" <<endl; } pair<map<int,string>::iterator, bool> pair2 = mp.insert(pair<int,string>(1,"aaaaa22222")); if (pair2.second == true) { cout<< "插入成功" <<endl; } else { cout<< "插入失敗" <<endl; } //方法2.make_pair mp.insert(make_pair<int,string>(3,"bbbbb33333")); mp.insert(make_pair<int,string>(4,"bbbbb44444")); //方法3.value_type mp.insert(map<int, string>::value_type(5,"ccccc55555")); mp.insert(map<int, string>::value_type(6,"ccccc66666")); //方法4.[] mp[7] = "ddddd77777"; mp[7] = "ddddd88888"; for (map<int,string>::iterator it = mp.begin(); it != mp.end(); it++) { cout<< it->first << "\t" << it->second <<endl; } cout<< "--------------------------------" <<endl; //刪除 while(!mp.empty()) { map<int,string>::iterator it = mp.begin(); cout<< it->first << "\t" << it->second <<endl; mp.erase(it); } return 0; }