關聯容器map

2021-09-05 12:32:01 字數 2776 閱讀 4059

map是一種key-value關聯的容器,第乙個稱為關鍵字,只能在map中出現一次,第二個稱為關鍵字的值。

特點:map是一類關聯式容器。它的特點是增加和刪除節點對迭代器的影響很小,除了那個操作節點,對其他的節點都沒有什麼影響。對於迭代器來說,可以修改實值,而不能修改key。

1、map是《鍵—值》對的集合 如:map< string ,int> word_count。map型別通常可理解為關聯陣列:可使用鍵作為下標來獲取乙個值,正如內建陣列型別一樣。而關聯的本質在於元素的值與某個特定的鍵相關聯,而並非通過元素在陣列中的位置來獲取。

2、記住!!!在vector < string,list< int > > 這種容器裡邊的型別也是容器的時候 >之間是有空格的,不然就變成》運算子了

3、對於鍵型別,唯一的約束就是必須支援  < 操作符,其他不作要求。所以,不能拿(list 型別的迭代器)做鍵型別,因為(9.2節)list 的迭代器不支援算術運算,也不支援關係運算。它只支援前置和後置的自增、自減運算以及相等(不相等)運算。

4、value_type 該型別比之前介紹的容器所使用的元素型別要複雜的多,value_type是儲存元素的鍵以及值的pair型別,且鍵為const型別,所以鍵初始化後是不能再賦值額。

在學習map的介面時,需要謹記value_type 是pair型別的,它的值成員可以修改,但鍵成員不能修改!!!!。

注意:使用下標訪問map與使用下標訪問陣列或者vector的行為截然不同:用下標訪問不存在的元素將導致在map容器中新增乙個新的元素,它的鍵即為下標值。

5.有別於vector或string型別,map下標操作符返回的型別和與對map迭代器進行解引用返回的型別不相同。

map物件的元素是鍵-值對,也即每個元素包括兩個部分:鍵以及由關聯的值。map的value_type 就反映了這個事實。

value_type是儲存元素的鍵以及值的pair型別,且鍵為const型別。所以鍵初始化後是不能再被賦值的。

mapword_count;//空的map物件,由string型別的鍵索引,關聯的值則為int型別。
如world_conunt陣列的vlaue_type為pair。

1.map迭代器進行解引用將產生pair型別的物件。

對迭代器進行解引用時將產生乙個引用,指向容器中乙個value_type型別的值。對於map容器,其value_type是乙個pair型別。

map::iterator map_it=word_count.begin();//定義乙個迭代器指向map容器的第乙個元素。

coutcout<<" "map_it->first = "new key";//錯誤!!!!鍵是const型別的

++map_it->second;//通過迭代器修改值

三、給map容器新增元素

四、使用下標訪問map物件

1.使用下標訪問map與使用下標訪問陣列或者vector行為截然不同:使用下標訪問不存在的元素將導致向map容器中新增乙個新的元素,它的鍵即為下標。

2.如同其他下標操作符一樣,map的下標也使用索引(鍵)來獲取該鍵所關聯的值。如果鍵已經在容器中,則map的下標運算與vector的下標運算行為相同:返回該鍵所關聯的值。

3.只有在所查詢的鍵不存在時,map容器才為該容器新增乙個新的元素,並將它插入到map容器物件中。此時,所關聯的值採用值初始化:類型別的元素採用預設建構函式初始化,而內建型別的元素則初始化為0.

mapword_count;

word_count["anna"]=1;

上述**發生了如下的事情:

在word_count 中查詢鍵為anna 的元素,沒有找到

將乙個新的鍵—值對插入到word_count中,它的鍵是const sring型別的物件,儲存anna。而它的值則採用值初始化,這就意味著在本例中值為 0

將這個新的鍵—值對插入到word_count中。

讀取新插入的元素,並將它的值賦為1.

//習題10.10

mapm;//首先建立乙個空的map容器m,然後在m中增加乙個鍵為0的元素,並將其賦值為1.

m[0] = 1;

vectorv[0] =1;//錯誤!!!vector不能通過下標進行初始化!!只能通過push_back, insert等增加元素.

下標行為的程式設計意義

對於map容器,如果下標所表示的鍵在容器中不存在,咋新增新元素,這一特性可使程式設計師簡練:

mapword_count;

string word;

while(cin>>word)

++word_count[word];

//這段程式用來記錄每個單詞出現的次數。while迴圈每次從標準輸入中讀入乙個單詞,如果這是新的單詞,則在word_count中新增以該單詞為索引的新元素。同時將它的值初始化為0、然後其值立即加1,所以每次在map中新增新元素時,所統計的出現次數正好從1開始。

#include#include#include#includeusing namespace std;

int main()

return 0;

}

map關聯容器

資料表記錄包含表索引和數值,請對錶索引相同的記錄進行合併,即將相同索引的數值進行求和運算,輸出按照key值公升序進行輸出。輸入描述 先輸入鍵值對的個數 然後輸入成對的index和value值,以空格隔開 輸出描述 輸出合併後的鍵值對 多行 輸入例子 4 0 10 2 1 23 4 輸出例子 0 3 ...

map容器即關聯容器

include string include map using namespace std intmain 資料 1.對映和多重對映以容器以鍵 值對 pair物件 的形式管理他們的元素,其元素按照 某種標準對鍵進行排列,預設標準為 排序時比較pair物件的資料成員first的值.相等則比較seco...

關聯容器(三) map

map介紹 關聯容器類,紅黑樹,預設按key公升序排序,集合中每個元素是乙個key value對,key唯一,可通過key快速得到對應的value。常用函式 1 建構函式 賦值 map 預設建構函式 map const map m 拷貝建構函式 map iterator begin,iterator...