C 標準庫關聯容器

2021-06-23 05:14:56 字數 3009 閱讀 3757

1 ,關聯容器定義

儲存物件集合的型別,支援通過鍵的高效訪問。和順序容器的本質差別在於:順序容器通過元素在容器中的位置順序儲存和訪問元素,而關聯容器卻是依靠鍵。map和set是兩個基本的關聯容器型別,map以鍵值對的形式組織儲存元素,而set僅儲存鍵。

2, pair型別(在utility標頭檔案中定義)

a)pair型別的操作:

pairp1;建立乙個空的pair物件,兩個元素型別分別是t1和t2,值初始化;

pairp1(v1,v2);建立乙個pair物件,具有兩個元素v1和v2,型別分別是t1和t2;

make_pair(v1,v2);以v1和v2作為值建立乙個pair物件,元素型別分別是v1和v2的型別;

p1.first;返回值為v1;

p1.second;返回值為v2;

p1 < p2;小於運算遵循字典次序;

p1 == p2;如果兩個pair物件的first成員和second成員依次相等,則兩個pair物件相等;

注:*pair型別屬於類模板。

3 ,關聯容器和順序容器的操作區別

a)共有的操作:

cc;

cc(c2);

cc(b,e);

關係操作符;

c.begin();

c.end();

c.rbegin();

c.rend();

size_type 

iterator 

const_iterator 

reverse_iterator

const_reverse_iterator 

difference_type 儲存兩個迭代器差值的有符號整型,可為負數

value_type 對於map,是pair 型別

reference value_type& 的同義詞

const_reference 等效於 const value_type&

swap和賦值操作;

clear和erase操作;

容器大小的操作(resize除外);

b)關聯容器不提供的操作:

front,push_front,pop_front,back,push_back,pop_back 

4, map型別

map型別可理解為關聯陣列,關聯的本質在於元素的值與某個特定的鍵相關聯,而與元素的位置無關。

a)map物件的定義:

mapm;建立乙個空的map物件m,其鍵和值的型別分別為k,v;

mapm(m2);建立m2的副本m,m必須具有和m2相同的鍵型別和值型別;

mapm(b,e);建立乙個map物件m,儲存迭代器[b,e)標記範圍內的所有元素的副本,元素型別必須能轉換為pair;

注:*鍵型別必須能夠定義《操作符。

b)map定義的型別:

map::key_type;鍵的型別

5, map容器的操作

a)新增元素:

m.insert(e);e為map的value_type型別的值。如果鍵e.first不存在,則新增乙個值為e.second的值,如果存在,則m不變。該操作返回乙個pair型別的物件,包含乙個指向新新增元素的map迭代器,以及乙個bool值,表示插入是否成功;

m.insert(b,e);將迭代器b和e標示區間內的所有元素插入到m中,所插入的元素必須為m.value_typpe型別,返回void;

m.insert(iter,e);如果m中不存在鍵e.first,則在m中以iter為起點搜尋新元素的位置並插入,返回乙個指向新新增元素的迭代器。

m["zhu"] = 1;在map中查詢鍵為"zhu"的元素,如果沒有,則插入乙個新的鍵值對,鍵為"zhu",值採用初始化,再將1賦給元素的值;

b)查詢元素:

m.count(k);返回m中k鍵出現的次數,返回值只能是0或1;

m.find(k);如果m中存在鍵為k的元素,則返回指向該元素的迭代器,否則,返回m.end();

c)刪除元素:

m.erase(k);刪除m中鍵為k的元素,返回值為所刪除元素的個數,只能是0或1,型別為size_type;

m.erase(p);刪除m中迭代器p所指向的元素,p所指向的元素必須存在,返回void;

m.erase(b,e);刪除m中由迭代器[b,e)標示範圍內的元素,[b,e)必須是有效範圍,返回void。

6,set型別

set容器單單儲存鍵的集合。

a)set容器不支援的操作:

set不支援下標操作;

與map一樣,set容器中的鍵也必須唯一,而且不能修改。

注:*set容器支援map的大部分的操作。

7, multimap和multiset

a)元素的新增刪除:

insert 操作每次都會新增乙個元素;

erase 帶有乙個鍵引數的該操作將刪除擁有該鍵的所有元素,返回刪除的元素個數,而帶有乙個或一對迭代器引數,則只刪除指定的元素,返回void。

b)查詢元素:

m.count,m.find()

m.lower_bound(k) 返回乙個指向鍵不小於k的元素的迭代器;

m.upper_bound(k) 返回乙個指向鍵大於k的第乙個元素的迭代器;

m.equal_range(k) 返回乙個pair物件,first成員等價於m.lower_bound(k);second成員等價於m.upper_bound(k);

注:*三種查詢方法都基於乙個事實,在multimap中,同乙個鍵所關聯的元素必然相鄰存放。

C 標準庫之關聯容器 C Primer

map multimap set multiset 關聯容器是通過紅黑樹來實現的。1 關聯容器的初始化 2 關鍵字型別的要求 3 pair型別 定義在utility標頭檔案中,含有first和second兩個public資料成員 4 關聯容器的操作 4.1 關聯容器額外的型別別名 4.2 新增元素 ...

STL標準庫的關聯容器

關聯容器支援高效的關鍵字查詢和訪問。map中的元素是一些關鍵字 值 key value 對 關鍵字起到索引的作用,值則是表示與索引相關聯的資料。set中每個元素只包含乙個關鍵字,可以說set是乙個特殊的map。標準庫提供8個關聯容器,允許重複關鍵字的容器的名字中都包含單詞multi 不保持關鍵字按順...

C 標準庫 順序容器

二 容器的選擇 三 容器的操作 容器就是特定型別物件的集合。順序容器為程式設計師提供了控制元素儲存和訪問順序的能力,這種順序不依賴於元素的值,而是與元素加入容器時的位置相對應。相比於陣列,它可以很隨意的實現元素的新增 刪除等,我們也無需擔心記憶體分配的問題。要使用容器,必須包含相應的標頭檔案 inc...