1. 程式人生 > >STL map映照容器(一)map建立、元素插入、元素刪除和遍歷訪問

STL map映照容器(一)map建立、元素插入、元素刪除和遍歷訪問

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