C++STL容器----map與multimap容器
阿新 • • 發佈:2019-01-14
一、定義
Map是STL [1] 的一個關聯容器,它提供一對一(其中第一個可以稱為關鍵字,每個關鍵字只能在map中出現一次,第二個可能稱為該關鍵字的值)的資料處理能力,由於這個特性,它完成有可能在我們處理一對一資料的時候,在程式設計上提供快速通道
《百度百科》
簡單來說,對於陣列來說,索引就相當於鍵值,s[i]就相當於映照的資料.map中不允許重複的鍵值,multimap允許重複的鍵值
二、用法
由於map容器也是使用紅黑樹存取,所以它的用法與set一樣在這裡就直接寫出程式碼
三、map程式碼實現
#include<map> #include<string> #include<iostream> using namespace std; int main(int argc,char *argv[]) { map<int,char >m;//定義map容器,其中鍵值為int型,映照的資料為char 型 m[25]='m'; m[28]='k'; m[30]='a'; m.erase(28);//刪除鍵值為28的元素 map<int,char>::iterator it;//定義迭代器 for(it=m.begin();it!=m.end();it++) { cout<<(*it).first<<" :"<<(*it).second<<endl;//讀取鍵值和映照的資料 } map<int,char>::reverse rit; for(rit=m.rbegin();rit!=m.rend();rit++) { cout<<(*rit).first<<" :"<<(*rit).second<<endl; } }
實現結果
multimap
由於multimap可以插入重複的鍵值,所以插入,刪除,查詢都與map的用法不相同
四、multimap程式碼實現
一、實現重複插入
#include<iostream> #pragma warning(disable:4786) #include<map> #include<string> using namespace std; int main(int argc,char *argv[]) { multimap<string,double> m; m.insert(pair<string,double>("jack",300.5)); //向multimap插入資料 m.insert(pair<string,double>("kity",200)); m.insert(pair<string,double>("Memi",500)); m.insert(pair<string,double>("jack",300.5));//插入重複的資料 multimap<string,double>::iterator it; for(it=m.begin();it!=m.end();it++) { cout<<(*it).first<<" :"<<(*it).second<<endl; } m.erase("jack"); cout<<"the elements after deleted :"<<endl; for(it=m.begin();it!=m.end();it++) { cout<<(*it).first<<" :"<<(*it).second<<endl; } }
實現結果:
二、實現刪除
#include<iostream> #include<string> #include<map> using namespace std; int main(int argc,char *argv[]) { multimap<string,double>m; //插入相關的資料 m.insert(pair<string,double>("jack",300.5) ); m.insert(pair<string,double>("Tom",200)); m.insert(pair<string,double>("jack",100.5) ); m.insert(pair<string,double>("Memi",500)); multimap<string,double>::iterator it; for(it=m.begin();it!=m.end();it++) { cout<<(*it).first<<" :"<<(*it).second<<endl; } cout<<"查詢的結果"<<endl; it=m.find("jack"); if(it!=m.end()) { cout<<(*it).first<<" :"<<(*it).second<<endl; } else { cout<<"抱歉沒找到"<<endl; } it=m.find("asda"); if(it!=m.end()) { cout<<(*it).first<<" :"<<(*it).second<<endl; } else { cout<<"抱歉沒找到"<<endl; } return 0; }
實現結果: