C 關聯容器

2021-07-11 09:22:46 字數 1970 閱讀 6540

1.關聯容器是通過關鍵字來儲存和訪問資料的。關聯容器分為兩大類:map和set。其中,map是通過鍵值對來操作的,這裡的鍵就是關鍵字,值就是對應的資料。

例如:mapm;定義了乙個空的map變數m,它的關鍵字型別是int,關鍵字對應的值的型別是int。可以將map理解成為函式,關鍵字是自變數,關鍵字對應的值是因變數。

set,這是乙個集合類。它的關鍵字和值是相同的。也就是說定義了乙個set,它的關鍵字和值是同乙個值。例如:

sets;定義了乙個空的set型別的變數s,它裡面可以儲存int型別的資料,它的關鍵字和值都是同乙個,型別都是int。set和數學上的集合是一樣的,都有乙個特點,唯一性。也就是說,set中的元素,一般不能重複出現。因此,我們有時候使用set,來判斷乙個關鍵字是否在乙個某乙個集合中。

2.map和set有很多種類:它們通過前面的修飾詞來加以區分。修飾詞主要有:unordered,multi,乙個表示無序,另外乙個表示關鍵字可以重複。例如:unordered_multiset表示,乙個無序的,關鍵字可以重複的set。這裡的無序的實現資料結構是雜湊函式。

map和set都是模板。

3.關於定義關聯容器,可能當你去讀c++ primer這本書時,會發現,在定義關聯容器時有好多方法。其實,通過我的時間發現,這和你的編譯環境,編譯器是有很大的聯絡的,又看看,你的編譯器對c++11支援多少。

例如:定義:mapword=,

};//對於這樣的定義,不同的編譯器,編譯之後的結果也是不一樣的。想vs2012好像就不能支援。

5.pair型別:

在之前我們說cocos2dx中讀取excle檔案時,最後提到了pair型別,這裡我們對其進行更加詳細的說明。

pair型別,這是乙個標準庫型別。pair型別,儲存兩個資料,在初始化的時候,需要傳遞兩個型別。pair的兩個資料成員是公共的。

6.關聯容器的操作:

6.1額外的型別別名:

例如:

map::value_type var;//var的型別就是pair。

key_type:就是關鍵字的型別

6.2關於map的操作.

6.2.1要向map中新增元素,這個元素的型別,必須是pair型別。正如上面所說的,map中value_type是pair型別。因此,就像之前講過的,要構造乙個pair型別的資料,例如:make_pair這就是構造乙個pair型別的資料。

例如:

mapm1;//不能重複關鍵字

auto it=m1.begin();

map::key_type i;

int j=10;

for(int i=0;i<10;i++)

新增元素,使用函式insert()。

但是,要特別注意:insert的返回值問題。

templatetypename enable_if::value,

_pairib>::type

insert(_valty&& _val)

上面是insert的原始碼。編譯環境vs2012

insert返回的值依賴於容器型別和引數。

如果是關鍵字不能重複的,insert返回乙個pair型別值。這個值的first資料成員儲存的是乙個指向要插入元素的迭代器,second資料成員,是乙個bool值,用來表示要插入的值,是否插入成功。

例如:

mapm1;//不能重複關鍵字

auto it=m1.begin();

map::key_type i;

int j=10;

for(int i=0;i<10;i++)

p.count(1);

count這個函式,是判斷這個關鍵字在map中,是否存在,而且,存在幾個。

//原始碼

//iterator find(const key_type& _keyval)

//auto temp= p.find(1);

find函式,只關心關鍵字是否存在在map中。

c 關聯容器

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

C 關聯容器

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

C 關聯容器

關聯容器 有序和無序的 不支援順序容器的位置相關的操作,例如push front或push back。原因是關聯容器中元素是根據關鍵字儲存的,這些操作對關聯容器沒有意義。而且,關聯容器也不支援建構函式或插入操作這些接受乙個元素值和乙個數量值的操作。關聯容器的迭代器都是雙向的 map的第乙個元素是關鍵...