跟着< >


  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()獲取迭代器然后進行遍歷,只不過遍歷方式是按索引的升序排列的。


 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM