Map是STL的一個關聯容器,它提供一對一(其中第一個能夠稱爲關鍵字,每一個關鍵字只能在map中出現一次,第二個稱爲該關鍵字的值)的數據 處理能力。c++
#include <map>
map<string,int>m;
這是定義了一個以string爲關鍵字,以int爲值的map函數
map<string,int>m; m["Bob"]=101; m["Alice"]=102; m["Eric"]=103;
m.insert(pair<string,int>("Lee",104));
m.insert(map<string,int>::value_type("Karen",105));
定義一個迭代指針iter,使其指向map,實現對map的遍歷。spa
#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自動在內部以關鍵字爲準,按字典序排序,而不是根據輸入的順序;code
須要注意的是 當我進行實驗的時候 我發現這樣一個現象:blog
#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
在作題時必定要好好注意。get
cout<<m.find("Bob")->second<<endl;
若是按關鍵字搜索,搜不到的話會輸出亂碼string
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()it
m.erase(iter1);
一樣的是指針的操做
m.erase(string("AAA"));
或者是根據關鍵字刪除