map:數據的插入
在構造map容器后,我們就可以往里面插入數據了。這里講三種插入數據的方法:
第一種:用insert函數插入pair數據
map<int, string> mapStudent; mapStudent.insert(pair<int, string>(1,“student_one”));
第二種:用insert函數插入value_type數據
map<int, string> mapStudent; mapStudent.insert(map<int, string>::value_type (1,"student_one"));
第三種:用make_pair
mapStudent.insert(make_pair(1, "student_one"));
第三種:用數組方式插入數據
注意:[]與at的區別
在C ++ 11中map::at存在:如果該鍵不存在則拋出異常,如果該元素不存在則find返回aMap.end();如果沒有值存在,則為相應鍵值operator[]初始化一個新值。
所以最好用:索引操作符[]進行設置和.find()/ .at()查找
map<int, string> mapStudent; mapStudent[1] = “student_one”; mapStudent[2] = “student_two”;
/* 如果是 #include <map> map<string, int> mapStudent; string s; 插入就用m[s]++; */
以上四種用法,雖然都可以實現數據的插入,但是它們是有區別的,當然了第一種和第二種在效果上是完成一樣的,用insert函數插入數據,在數據的插入上涉及到集合的唯一性這個概念,即當map中有這個關鍵字時,insert操作是不能再插入這個數據的,
但是用數組方式就不同了,它可以覆蓋以前該關鍵字對應的值,即:如果當前存在該關鍵字,則覆蓋改關鍵字的值,否則,以改關鍵字新建一個key—value;
最后記錄下map用lambda表達式for_ecah遍歷時的一個小問題
#include <iostream> #include <map> #include <algorithm> using namespace std; int main() { map<int ,string> m; m.insert(pair<int,string>(1,"a")); m.insert(make_pair(2,"b")); m.insert(map<int,string>::value_type (3,"c")); m.insert(pair<int,string>(4,"d")); for_each(m.cbegin(),m.cend(),[](const pair<int,string> &it) { cout<<"first:"<<it.first<<" second:"<<it.second<<endl; }); return 0; }
lambda中的參數列表要寫成pair類型,以為map返回的是一對數據,是pair型的,不可只用map<int,string>::iterator it 迭代器來遍歷。
