1. 程式人生 > >STL map 詳細用法

STL map 詳細用法

Map是STL的一個關聯容器,它提供一對一(其中第一個可以稱為關鍵字,每個關鍵字只能在map中出現一次,第二個稱為該關鍵字的值)的資料 處理能力。

需要的庫

#include <map>

基本操作

定義

map<string,int>m;

這是定義了一個以string為關鍵字,以int為值的map

插入

方法1:

map<string,int>m;
m["Bob"]=101;    
m["Alice"]=102;  
m["Eric"]=103;   

方法2:

m.insert(pair<string,int>("Lee",104));

方法3:

m.insert(map<string,int>::value_type("Karen",105)); 

遍歷

定義一個迭代指標iter,使其指向map,實現對map的遍歷。

#include<bits/stdc++.h>

using namespace std;

int main()
{
    map<string,int>m;
    m["Bob"]=101;
    m["Alice"]=102;
    m["Eric"]=103;
    map<string,int>::iterator iter;
    for(iter=m.begin(); iter!=m.end(); iter++)
        cout<<iter->first <<"->"<<iter->second<<endl;
}

輸出為:

Alice->102
Bob->101
Eric->103

可以看到map自動在內部以關鍵字為準,按字典序排序,而不是根據輸入的順序;

需要注意的是 當我進行實驗的時候 我發現這樣一個現象:

#include<bits/stdc++.h>

using namespace std;

int main()
{
    map<string,int>m;
    m["Bob"]=101;
    m["Alice"]=102;
    m["Eric"]=103;
    map<string,int>::iterator iter;
    for(iter=m.begin(); iter!=m.end(); iter++)
        cout<<iter->first <<"->"<<iter->second<<endl;
        
    if(m["AAA"]==0)
    cout<<"NO"<<endl;

    for(iter=m.begin(); iter!=m.end(); iter++)
        cout<<iter->first <<"->"<<iter->second<<endl;
        

}

當詢問一個map中不存在的數的時候,返回的值應該是0,不過當你再次遍歷的時候,就會發現map中已經多了一個鍵值對,只不過值是0:

Alice->102
Bob->101
Eric->103
NO
AAA->0
Alice->102
Bob->101
Eric->103

在做題時一定要好好注意。

查詢

方法1:

cout<<m.find("Bob")->second<<endl;

如果按關鍵字搜尋,搜不到的話會輸出亂碼

方法2:

    map<string,int>::iterator iter1;
    iter1 = m.find(string("Bob"));
    if(iter1 != m.end())
    cout<<iter1->first <<"->"<<iter1->second<<endl;
    else    
    cout<<"no fount"<<endl;

定義一個指標,指向map,如果沒有的話會返回m.end()

刪除

方法1

m.erase(iter1);

同樣的是指標的操作

方法2

m.erase(string("AAA"));

或者是根據關鍵字刪除

 

map的相關函式

  • begin()          返回指向map頭部的迭代器
  • clear()         刪除所有元素
  • count()          返回指定元素出現的次數
  • empty()          如果map為空則返回true
  • end()            返回指向map末尾的迭代器
  • equal_range()    返回特殊條目的迭代器對
  • erase()          刪除一個元素
  • find()           查詢一個元素
  • get_allocator()  返回map的配置器
  • insert()         插入元素
  • key_comp()       返回比較元素key的函式
  • lower_bound()    返回鍵值>=給定元素的第一個位置
  • max_size()       返回可以容納的最大元素個數
  • rbegin()         返回一個指向map尾部的逆向迭代器
  • rend()           返回一個指向map頭部的逆向迭代器
  • size()           返回map中元素的個數
  • swap()            交換兩個map
  • upper_bound()     返回鍵值>給定元素的第一個位置
  • value_comp()      返回比較元素value的函式

&n