11 2關聯容器概述

2021-07-12 04:10:49 字數 2199 閱讀 1485

關聯容器不支援順序容器的位置操作,如push_back或push_front。

也不支援建構函式或插入操作這些接受乙個元素值和乙個數量值的操作。

定義乙個map時,必須既指明關鍵字型別又指明值型別;而定義乙個set時,只需指明關鍵字型別,因為set中沒有值。

每個關聯容器都定義了乙個預設建構函式,它建立乙個指定型別的空容器。我們可以將關聯容器初始化為另乙個同型別容器的拷貝,或是從乙個值範圍類初始化關聯容器,只要這些值可以轉化為容器所需型別就可以。

//關聯容器初始化

map word_count; //空容器

//列表初始化

set exclude=;

//三個元素,authors將姓對映為名

map authors=,,};

map和set中的關鍵字必須是唯一的,即,對於乙個給定的關鍵字,只能有乙個元素的關鍵字等於它,容器multimap和multiset沒有此限制。

#include

#include

#include

#include

#include

using

namespace

std;

int main()

//iset包含來自ivec的不重複的元素;miset包含所有20個元素

set iset(ivec.cbegin(), ivec.cend());

multiset

miset(ivec.cbegin(), ivec.cend());

cout

<< ivec.size() << endl;//列印出20

cout

<< iset.size() << endl;//列印出10

cout

<< miset.size() << endl;//列印出20

return

0;}

對於有序容器–map、multimap、set以及multiset,關鍵字型別必須定義元素比較方法。在集合型別中,關鍵字型別就是元素型別;在對映中,關鍵字型別就是元素的第一部分。

pair定義在utility中。

//pair型別

//它定義在標頭檔案utility中,乙個pair儲存兩個資料成員。pair是乙個用來生成特定

//型別的模板

pair anon; //儲存兩個string

pair word_count; //儲存乙個string和乙個size_t

pair

> line; //儲存string和vector

//我們也可以為每個成員提供初始化器

pair author;

//建立pair物件函式

pair

process(vector

&v); //列表初始化

else

return pair(); //隱式構造返回值

<< endl << "multimap裡有"

<< ma.size() << "個資料."

<< endl;

multimap

::const_iterator im;

for (im = ma.begin(); im != ma.end(); ++im)

return

0;}

容器 順序容器 關聯容器

容器分為 順序容器 關聯容器,示意圖如下 順序容器 只儲存值,關聯容器 key value形式,關聯容器的乙個元素包含兩個部分 鍵值對 key value 有序容器 底層實現為紅黑樹,即容器內的key是有序的 無序容器 底層實現為hash table,雜湊表 區別 順序容器通過元素在容器中的位置順序...

STL 關聯容器

1 關聯容器與順序容器的本質區別 關聯容器通過鍵 key 儲存和讀取元素,而順序容器則通過元素在容器中的位置順序儲存和訪問元素。2 關聯容器的型別 map set multimap multiset 3 pair型別 pair型別的比較 p1 p1 p2 如果兩個pair物件的first和secon...

c 關聯容器

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