天天看點

C++map類型

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版本的傳回類型

C++map類型

使用下标給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疊代器

C++map類型