Map容器,顧名思義,地圖,是用來進行索引的一個容器。
在定義Map容器之前,c++首先定義了一個pair類型,這個類型有兩個參數pair<T1,T2>。
pair類型的對象通過點號(.)訪問其成員(都是公有成員)first與second。
pair類型可以通過make_pair()函數來進行初始化。
下面定義map類型的對象
map<string ,int> objmap;//這個語句定義了一個空的map對象,其中string類型的為索引,int類型的為其值。
對於自定義類型作為鍵類型,特別要注意的是自定義類型必須定義<這個操作符。並且必須是嚴格弱排序。也即兩個鍵比較時,不能出現相互小於的情況。
在map類型下面定義了三個類型。
map<K,V>::key_type //在map容器中,作為索引的鍵的類型
map<K,V>::mapped //在map容器中,鍵所關聯的值的類型
map<K,V>::value_type //他是個pair類型
我們需要注意的是map的迭代器類型解引用將產生一個pair類型的對象
如
map<K,V>::iterator map_it = mapobj.begin();
map_it->second;//這個便是訪問pair類型的第二個值
給map中添加元素,有兩種方法。
第一:
用下標訪問元素時,如果map中已經存在了這個索引,則不做任何操作,但是如果索引中沒有這個下標時,會將這個下標添加到索引中,並且將索引的值默認進行初始化。
1 mapobj["gaoteng"];
假如map中沒有"gaoteng"這個索引的話,會將"gaoteng"加入到map中,同時將“gaoteng”所指示的值初始化。
需要強調的是:下標操作返回的是map<K,V>::mapped_type,而迭代器返回的是pair對象,這個特性與順序容器不同。
第二:
用map對象的成員insert()函數來插入。
用這個函數特別要注意的是他的返回值類型。
在形參中是pair類型的insert版本,將返回一個值,這個值是pair對象,他包含一個指向插入元素的迭代器和一個bool類型的表示是否插入的變量。
如:
pari<map<K,V>::iterator,bool> ret = mapobj.insert(make_pair(k,v));
最后提供兩個檢查map元素的方法:
m.count(k) //統計m中k出現的次數
m.find(k)//返回指向k索引的迭代器,如果沒找到,返回超出末端的迭代器
從map中刪除對象
與順序容器不同的是,erase()成員函數返回void,而順序容器則返回一個指向被刪除元素的后一個迭代器。
與順序容器一樣,也可以通過 m.begin()與m.end()獲取迭代器然后進行遍歷,只不過遍歷方式是按索引的升序排列的。