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...