STL map映照容器(一)map建立、元素插入、元素刪除和遍歷訪問
阿新 • • 發佈:2018-12-19
map映照容器的元素資料是由一個鍵值和一個映照資料組成的,鍵值與映照資料之間具有一一映照的關係。
map映照容器的資料結構是採用紅黑樹來實現的,插入元素的鍵值不允許重複,比較函式只對元素的鍵值進行比較,元素的各項資料可通過鍵值檢索出來。
鍵值 | 映照資料 |
---|---|
Name | Number |
Tom | 98 |
Tony | 96 |
Amy | 97 |
使用map容器需要標頭檔案包含語句#include <map>
。
1.map建立、元素插入和遍歷訪問
建立map物件,鍵值與映照資料的型別由自己定義。在沒有指定比較函式時,元素的插入位置是按鍵值由小到大插入到紅黑樹中去的,這點和set一樣。
下面這個程式詳細說明了如何操作map容器。
#include <map> #include <iostream> #include <string> using namespace std; int main() { map<string,int> m; //定義map物件,當前沒有任何元素 m["Tom"]=98; m["Tony"]=96; m["Amy"]=97; //插入元素,按鍵值的由小到大放入紅黑樹中 map<string,int>::iterator it; for(it=m.begin();it!=m.end();it++) { cout<<(*it).first<<" : "<<(*it).second<<endl; //輸出鍵值與映照資料 } //前向遍歷元素 return 0; }
執行結果: Tom : 96 Tony : 98.5 Amy : 97.5
程式編譯時,會產生代號為“warning C4786”的警告,“4786”是標記符超長警告的代號。可以在程式的標頭檔案包含程式碼前使用#pragma warning(disable:4786)
巨集語句,強制編譯器忽略該警告。4786號警告對程式的正確性與執行並無影響。
2.刪除元素
與set容器一樣,map容器的erase()刪除元素函式,可以刪除某個迭代器位置上的元素、等於某個元素的值、一個迭代器區間上的所有元素。當然也可以使用clear()方法清空map映照容器。 下面這個程式演示了刪除map容器中鍵值為28的元素:
#pragma warning (disable:4786)
#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
map<int,char> m;
//定義map物件,當前沒有任何元素
m[25]='m';
m[28]='k';
m[10]='x';
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;
//輸出鍵值與映照資料
}
//前向遍歷元素
return 0;
}
執行結果: 10 : x 25 : m 30 : a