一、insert
◦1)用insert函數插入pair數據
◦map<int, string> mapStudent;
◦mapStudent.insert(pair<int, string>(1, “student_one”));
◦2)用insert函數插入value_type數據
◦map<int, string> mapStudent;
◦mapStudent.insert(map<int, string>::value_type (1, “student_one”));
◦3)用數組方式插入數據
◦map<int, string> mapStudent;
◦mapStudent[1]=“student1”;
◦mapStudent[2]=“student2”;
前兩種如果插入相同的key,則插入失敗,但是不會報錯,例如
map<int,int> ss;
ss.insert(make_pair(1,1));
ss.insert(make_pair(1,2));
兩次插入之後,ss[1]仍然為1.那麼我們怎麼知道是否插入成功了呢?
可以用pair來獲得是否插入成功。
◦pair<map<int, string>::iterator, bool> Insert_Pair;
◦Insert_Pair = mapStudent.insert(map<int, string>::value_type (1, “student_one”));
◦我們通過pair的第二個變量來知道是否插入成功,它的第一個變量返回的是一個map的迭代器,如果插入成功的話Insert_Pair.second應該是true的,否則為false。
但是第三種會覆蓋原先的值
map<int,int> ss;
ss[1]=1;
ss[1]=2;
兩次插入之後,ss[1]wei 2.
二、根據key讀map:
首先讀取map最直觀的方式是map[key],但是這樣面臨一個問題,可能這個key在map中根本不存在,因此在讀取之前需要判斷是否存在。
兩種方式可以判斷是否存在。
int num=map.count(key)
num=0: 不存在
num=1:存在
另一種是使用
map<type,type>::iterator iter;
iter=map.find(key);
if(iter!=map.end()){
iter->second;//get data
}
三、遍歷所有數據
map本身是紅黑樹,所以數據是有順序的,可以使用兩種順序呢遍歷,實際上就是樹的中序遍歷。
升序遍歷是首先訪問左子結點,降序遍歷首先訪問右子節點。
map<int,int> ss;
ss.insert(make_pair(1,1));
ss.insert(make_pair(5,5));
ss.insert(make_pair(10,10));
ss.insert(make_pair(6,6));
ss.insert(make_pair(4,2));
map<int,int>::iterator iter1;
for(iter1=ss.begin();iter1!=ss.end();iter1++){
cout<<iter1->first<<" "<<iter1->second<<endl;
}
cout<<endl;
map<int,int>::reverse_iterator iter2;
for(iter2=ss.rbegin();iter2!=ss.rend();iter2++){
cout<<iter2->first<<" "<<iter2->second<<endl;
}
cout<<endl;
結果為
四、數據的清空與判空
清空map中的數據可以用clear()函數,判定map中是否有數據可以用empty()函數,它返回true則説明是空map
五、數據的刪除
這裏要用到erase函數,它有三個重載了的函數,下面在例子中詳細説明它們的用法
◦ 1)如果要刪除1, 用迭代器刪除
◦ map<int, string>::iterator iter;
◦ iter = mapStudent.find(1);
◦ mapStudent.erase(iter);
◦ 2)如果要刪除1,用關鍵字刪除
◦ Int n = mapStudent.erase(1);//如果刪除了會返回1,否則返回0
◦ 3)用迭代器,成片的刪除
◦ //一下代碼把整個map清空
◦ mapStudent.earse(mapStudent.begin(), mapStudent.end());
◦ //成片刪除要注意的是,也是STL的特性,刪除區間是一個前閉後開的集合