一、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;

結果為

MapQuickItem用法sourceItem是否會覆蓋上一個_數據

 四、數據的清空與判空

 清空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的特性,刪除區間是一個前閉後開的集合