map是鍵-值對的集合,可以了解為關聯數組,可以使用鍵作為下标來擷取一個值
本文位址:,轉載請注明源位址。
使用前添加map頭檔案,必須分别指明鍵和值的類型:
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類型的對象,存儲疊代器b和e标記的範圍内所有元素的副本,元素的類型必須能轉化為pair<const
k,v>
map對象的元素是鍵-值對,map的value_type反映了這樣的事實,value_type是存儲元素的鍵以及值的pair類型,而且鍵為const,比如word_count的類型為:
pair<const string, int>類型
map類定義的類型:
map<k,v>::key_type 在map容器中,用作索引的鍵的類型
map<k,v>::mapped_type 在map容器中,鍵所關聯的值的類型
map<k,v>::value_type 一個pair類型,它的first元素具有const
map<k,v>::key_type類型,而second元素則為map<k,v>::mapped_type類型
map疊代器進行解引用将産生pair類型的對象
使用insert成員實作或者先用下标操作符擷取元素,然後給擷取的元素指派
使用下标通路map對象
map的下标也使用索引(就是鍵)來擷取該鍵所關聯的值,如果該鍵已在容器中,則map的下标運算行為相同,傳回該鍵所關聯的值。隻有在所查找的鍵不存在的時候,map容器才為該鍵建立一個新的元素,并将它插入到此map對象中。
1、下标操作符傳回值的使用
下标操作符傳回的是左值,即使特定鍵所關聯的值
2、下标行為的程式設計意義
如果下标所表示的鍵在容器中不在,則添加新元素,這一特性可使程式驚人的簡練:
這段程式用來記錄每個單詞出現的次數
程式設計練習:編寫程式統計并輸出所讀入的單詞出現的次數
插入單個元素的insert版本使用鍵-值pair類型的參數,對于參數為一對疊代器的版本,疊代器必須指向鍵-值pair類型的元素
map容器的接受單個值的insert版本的傳回類型

使用下标給map添加新元素,元素的值部分将采用值初始化,而插入元素的另一個方法是:直接使用insert成員,文法更緊湊:
傳遞給insert的實參相當的笨拙,可以用兩種方法簡化:
使用make_pair
或使用typedef:
檢測insert的傳回值
如果試圖插入的元素所對應的鍵已經在容器中,則insert将不做任何操作,但是帶有一個鍵-值pair形參的insert版本将傳回一個值:包含一個疊代器和一個bool值的pair對象,其中疊代器指向map中具有相應鍵的元素,而bool值則表示是否插入了該元素
下面使用insert重寫的單詞統計程式:
下标操作符讀取一個值會産生副作用,map容器提供了兩個操作:count和find,用于檢查某個鍵是否存在而不會插入該鍵
m.count(k) 傳回m中k的出現次數
m.find(k) 如果m容器中存在按k索引的元素,則傳回指向該元素的疊代器。如果不存在,則傳回超出末端疊代器
1、使用count檢查map對象中某鍵是否存在
對于map對象,count成員的傳回值隻能是0或1,map容器隻允許一個鍵對應一個執行個體,所有count可有效地表明一個鍵是否存在
2、讀取元素而又不插入該元素
find操作傳回指向元素的疊代器,如果元素不存在,則傳回end疊代器