C 關聯容器

2021-08-14 09:12:30 字數 2163 閱讀 7241

不同於順序容器,關聯容器根據元素的鍵(key_type)來組織元素。 關聯容器有setmap兩類,根據unordered、multi修飾共衍生出8種關聯容器。

一般根據是否有序來劃分:

有序關聯容器

無序關聯容器

這樣劃分的依據是它們對關鍵字型別的要求不同

舉例

set< int >

int是key_type也是value_type

map< string,int >

所有不帶unordered字首的關聯容器都是有序關聯容器,關鍵字型別必須提供乙個嚴格小於的比較操作,這個操作可以是過載的operator<,也可以是乙個比較函式(函式型別要求bool (const key_type&,const key_type&))。

使用比較函式定義有序關聯容器

//自定義型別,我們需要為它提供嚴格小於比較操作

struct mystruct

;

//比較函式

bool cmp(const mystruct& lhs, const mystruct& rhs)

else

}

//自定義型別mystruct的set

setdecltype(cmp)*> s(cmp);

當我們建立乙個容器物件時,才會以構造引數的形式提供真正的比較操作。

無序關聯容器不是用比較運算子來組織元素的,而是用雜湊函式關鍵字型別的==運算子來組織元素。

無序容器中元素的排列不是輸入順序

無序容器中的元素按照它們的hash值被分配到不同的桶中,因此無序容器中元素的排列次序與新增進容器的次序沒有關係

定義乙個管理自定義型別的無序容器

自定義型別還使用上述的 mystruct

******************************

******************************

******************************

******************************

******************************

雖然我們不能將兩個迭代器相減,但可以通過distance函式來獲取兩個迭代器之間的「距離」,即它們之間相差幾個元素

map系

map遍歷容器

迭代器支援 ++ - - != 等操作,以此來遍歷容器

新增元素

返回值是pair< iterator,bool>,bool值表示插入成功或失敗(map不允許有重複元素),iterator則指向指定關鍵字的元素

刪除元素

下標操作

訪問元素

multimap

multimap允許有重複的鍵值,下面說明其與map在操作上不同的地方

遍歷容器

完全相同

新增元素

由於multimap允許重複的鍵值,因此新增元素不會失敗,insert的返回值是指向新新增元素的迭代器

刪除元素

按鍵值刪是刪除multimap中所有鍵值相等的元素,返回值是可能大於1的

下標操作

multimap不支援下標操作

訪問元素

在multimap中,所有鍵值相同的元素是相鄰儲存的,由於multimap不支援下標操作,所有只能通過迭代器來訪問

set系

set沒有下標操作,其餘操作與map相同

無序容器僅僅不支援lower_bound和upper_bound,其他與有序容器並無不同,在大多數情況下都可以用無序容器替換乙個有序容器。

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 的元素以鍵 ...