C 關聯容器

2021-08-03 09:17:04 字數 1338 閱讀 1860

關聯容器(有序和無序的)不支援順序容器的位置相關的操作,例如push_front或push_back。原因是關聯容器中元素是根據關鍵字儲存的,這些操作對關聯容器沒有意義。而且,關聯容器也不支援建構函式或插入操作這些接受乙個元素值和乙個數量值的操作。

關聯容器的迭代器都是雙向的

map的第乙個元素是關鍵字,而set只有乙個元素亦是關鍵字。關聯容器對其關鍵字型別有一些限制。對於有序容器———map、multimap、set以及multiset,關鍵字型別必須定義元素的比較方法。預設情況下,標準庫使用關鍵字型別的《運算子來比較關鍵字。

在介紹關聯容器操作之前,我們需要了解名為pair的標準庫型別,它定義在標頭檔案utility中。

乙個pair儲存兩個資料成員。類似容器,pair是乙個用來生成特定型別的模板。當建立乙個pair時,我們必須提供兩個型別名,pair的資料成員將具有對應的型別。

pair

<

string,string

> anon; //儲存兩個string

pair

<

string,size_t> word_count //儲存乙個string和乙個size_t

pair的預設建構函式對資料成員進行值初始化。我們也可以為每個成員提供初始化器:

pair

<

string,string

> author;

與其他標準庫型別不同,pair的資料成員是public的,兩個成員分別命名為first和second。我們用普通的成員訪問符號來訪問它們。

w.fisrt

w.second

當解引用乙個關聯容器迭代器時,我們會得到乙個型別為容器的value_type的值的引用。對map而言,value_type是乙個pair型別,其first成員儲存const的關鍵字(不能改),second成員儲存值(可以改)。

set的迭代器是const的~

遍歷

//獲得乙個指向首元素的迭代器

auto map_it = word_count.cbegin();

while(map_it != word_count.cend())

預設情況下,無序容器使用關鍵字型別的==運算子來比較元素。它們還使用乙個hash< key_type>型別的物件來生成每個元素的雜湊值。標準庫為內建型別(包括指標)提供了hash模板。還為一些標準庫型別,包括sting和只能指標型別定義了hash。因此,我們可以直接定義關鍵字是內建型別(包括指標型別)、string還有只能指標型別的無序容器。

c 關聯容器

1.map建構函式 mapm 普通初始化 mapm m2 複製初始化法 mapm b,e 另乙個map物件的迭代器初始化法 注意 1 鍵值型別必須定義 操作符號,資料訪問時需要呼叫。2 m aaa 下表訪問方式導致的結果是,若鍵對應的值不存在,則插入該鍵值對應的預設值。2.map插入操作 m.ins...

C 關聯容器

1.關聯容器是通過關鍵字來儲存和訪問資料的。關聯容器分為兩大類 map和set。其中,map是通過鍵值對來操作的,這裡的鍵就是關鍵字,值就是對應的資料。例如 mapm 定義了乙個空的map變數m,它的關鍵字型別是int,關鍵字對應的值的型別是int。可以將map理解成為函式,關鍵字是自變數,關鍵字對...

C 關聯容器

1 關聯容器定義 關聯容器和順序容器的本質差別在於 關聯容器通過鍵 key 儲存和讀取元素,而順序容器 則通過元素在容器中的位置順序儲存和訪問元素。關聯容器 associative containers 支援通過鍵來高效地查詢和讀取元素。兩個基本的關聯容器型別是 map set。map 的元素以鍵 ...