set
與map
和pair容器
首先來看看
set集合容器:
set集合容器實現了紅黑樹的平衡二叉樹資料結構,在插入元素時它會自動調整二叉樹的排列,把該元素放到適當的位置,並且保證左右子樹平衡。平衡二叉檢索樹採用中序遍歷演算法。
對於set,
vector
,map
等等,它們的
前向迭代器
定義是這樣的(以
set為例):
set::iterator it;
for(it=s.begin();it!=s.end();it++){}
那麼反向迭代器呢?
set::reverse_iterator rit;
for(rit=s.rbegin();rit!=s.rend();rit++){}
常用方法:
insert(),erase(),find(),clear()
find()
方法是查詢元素方法,如果找到就返回該元素迭代器的位置,否則就返回最後乙個元素後面的乙個位置。
這樣來使用:
it=s.find(5);
if(it!=s.end()) {}
else {}
關於比較函式:
如果元素不是結構體,而是基本資料型別,那麼就自己定義乙個比較函式:
struct cmp
};
int main()
如果元素是結構體,那麼比較函式直接可以寫在結構體裡面。
sets;
struct student
};
對於set容器來說,它不能有關鍵字相同的元素同時存在,如果要保留相同的元素,就用
multiset
多重集合容器。
其基本操作跟
set集合容器差不多一樣。定義方法是:
multisetms;
map映照容器:
map映照容器的元素資料是由乙個鍵值和乙個映照資料組成的,鍵值與映照資料之間具有一一對應關係。
map也是用紅黑樹實現的。
同set
一樣,map
不允許插入元素鍵值相同,而
multimap
多重應照集合可以允許鍵值重複。
使用方法:
int main()
主要方法有:
insert(),clear(),erase(),find()
等等,基本跟
set一樣。對於
multimap
使用方法跟
map差不多一樣。
std::pair
主要的作用是將兩個資料組合成乙個資料,兩個資料可以是同一型別或者不同型別。
例如std::pair
或者std::pair
等。pair
實質上是乙個結構體,其主要的兩個成員變數是
first
和second
,這兩個變數可以直接使用。初始化乙個
pair
可以使用建構函式,也可以使用
std::make_pair
函式。
make_pair
函式的定義如下:
template pair make_pair(t1 a, t2 b)
所以m.insert(pair("luce",88.5)); 與
m.insert(make_pair("luce",88.5));
是同樣的效果。
示例:int main()
set容器 map容器
簡介 本質 set和multiset區別 構造 賦值 include void printset set int s cout endl 構造和賦值 void test01 intmain 總結 函式原型 include void printset set int s cout endl 大小 vo...
C 關聯容器的使用set與map
一 在c 中類似vector封裝陣列,string封裝字元,list封裝了鍊錶,map與set則封裝了二叉樹。其中set與map封裝的二叉樹則是採用的紅黑樹的底層結構的,這種結構與一般的二叉樹的型別有所不同,這種結構的二叉樹更加平衡高效檢索的二叉樹,對存入的資料進行了排序化的儲存。二 1 為什麼ma...
c 中關聯容器map與set總結
1.set set分為兩種 unordered set和set其中unordered set中的元素儲存是無序的,set中的元素儲存是由序的。兩種set中每個元素只存有乙個key,它支援高效的關鍵字查詢操作。set對應數學中的 集合。set具有以下的特點 儲存同一型別的資料元素 這點和vector ...