程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++標准庫map類型

C++標准庫map類型

編輯:C++入門知識

map是鍵-值對的集合。map類型通常可以理解為關聯數組:可以使用鍵作為下標獲取一個值,正如內置數組一樣。而關聯的本質在於元素的值於某個特定的鍵相關聯,而並非通過元素在數組中的位置獲取。

1.map對象的定義
要使用map對象,則必須包含map頭文件。在定義map對象時,必須分別指明鍵和值得類型

map<string,int> word_count;         

string為鍵,int為值

map的構造函數

map<k,v> m;                   //創建一個名為m的空map對象,其鍵和值得類型分別為k和v

map<k,v> m(m2);           //創建m2的副本m,m與m2必須有相同的鍵類型和值類型

map<k,v> m(b,e)           //創建map類型的對象m,存儲迭代器b和e標記范圍內所有元素的副本。元素的類型必須能轉換為pair<const k,v>。

2.map定義的類型
map<k,v>::key_type       在map容器中用作索引的鍵的類型

map<k,v>::maped_type  在map容器中,鍵所關聯的值得類型

map<k,v>::value_type    一個pair類型,它的first元素具有const map<k,v>::key_type類型,而second元素則為map<k,v>::maped_type類型。

對map迭代器進行解引用將獲得一個pair對象,它的first成員存放鍵,為const,而second成員則存放值。

3.給map添加元素
與其他下標操作符一樣,map的下標也是使用索引獲取該鍵關聯的值。如果該鍵在容器中,則map的下標運算與vector的下標元素一樣:返回該鍵所關聯的值。只有在所查的鍵不存在是,map容器才為該鍵創建一個新的元素,並將它插入到此map對象中。此時,所關聯的值采用值初始化:類類型的元素用默認的構造函數初始化,而內置類型的元素則初始化為0。

 

map容器提供的insert操作

m.insert(e)               e是在m上的value_type類型的值。如果鍵(e.first)不在m中,則插入一個e.second的新元素;如果該鍵在m中已經存在,則保持m不變。該函數返回一個pair類型對象,包含指向鍵為e.first的元素的map迭代器,以及一個bool類型的對象,表示是否插入了該元素

m.insert(beg,end)     迭代器之間的元素必須為value_type類型的鍵-值對。在該范圍內的元素,如果不在m中,則插入。

m.insert(iter,e)          從迭代器iter開始尋找,不存在m中則插入,返回迭代器,指向m中具有指定鍵的元素

 

word_count.insert(map<string,int>::value_type("Anna",1));

也可以簡化為 word_count(make_pair("Anna",1));

 

使用第一種方法插入返回的是pair類型。

pair<map<string,int>::iterator,bool> ret=word_count.insert(map<string,int>::value_type("Anna",1));

4.查找並獲取map中的元素
使用下標獲取map中國的值,如果該鍵不存在,則插入了顯得元素。下面map提供了兩個操作

m.count(k)       返回m中k出現的次數

m.find(k)          存在則返回指向該元素的迭代器,否則返回超出末端迭代器

對於map,count的返回值只可能是0或者1,通過該函數就可以知道是否存在,然後使用下標操作,則不會出現不存在則插入新元素的問題。

對於find函數,通過判斷是否與超過末端的迭代器相等判斷是否存在,若存在則使用返回的迭代器,該返回的迭代器是pair類型,通過下面的方法獲得值int value=iter->second;

5.從map中刪除元素
m.erase(k)        刪除m中鍵為k的元素。返回size_type類型的值,表示刪除元素的個數

m.erase(p)        從m中刪除迭代器p所指向的元素。p必須指向m中確實存在的元素,而且不能等於m.end()。返回void類型

m.erase(b,e)     從m中刪除一段范圍內的元素,該范圍由迭代器對b和e標記。b和e必須標記m中一段有效范圍:即b和e都必須指向m中的元素或者最後一個元素的下一個位置。而且b和e要麼相等(此時刪除的范圍為空),要麼b指向的元素必須出現在e所指向的元素之前。返回void類型。

 

除此之外,map還提供一種特殊的erase操作,其參數是key_type類型的值,如果擁有該元素的鍵存在,則刪除該元素,返回刪除的個數。對於map來說,返回值為1或者0。0表示表示刪除的元素在map中不存在。

 

對於map對象的遍歷,可以使用迭代器,m.end()和m.begin()。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved