C STL之Set集合容器

2021-07-05 18:49:58 字數 1207 閱讀 2655

set集合容器實現了紅黑樹的平衡二叉樹的資料結構,在插入元素時候,它會自動的進行調整二叉樹的排列,把該元素放到適當的位置,以保證每個子樹根節點的鍵值大於左子樹所有的鍵值,小於右子樹所有節點的鍵值;另外,還要確保根節點左子樹的高度與右子樹的高度相等,這樣,二叉樹的高度最小,從而達到檢索的速度最快

注意:不會插入相同的鍵值,若存在相同的鍵值,第二次插入忽略。

平衡二叉檢索樹的檢索使用的是二叉樹的中序遍歷演算法,檢索效率高於vector,deque,和list等容器。另外,採用中序遍歷演算法可將鍵值由小到大遍歷出來,所以,可以這麼去理解,平衡二叉樹在插入元素時,就會自動的將元素按鍵值從小到大順序排列。

對於set容器中的鍵值,不可直接修改。因此如果把容器中的乙個鍵值修改了,set容器就會根據新的鍵值旋轉子樹,以保持新的平衡,這樣,修改的鍵值很可能就不在原來的那個位置上了,可以這麼說,構造set集合主要目的就是為了快速檢索。

multiset,map,multimap的內部結構也是平衡二叉樹,但是這4個之間到底有什麼不同呢??乙個個來看

*元素的插入與中序遍歷

採用insert()方法把元素插入集合中去,插入的具體規則在預設的比較規則下,是按元素的由小到大插入語,如果指定了比較規則函式,則按自定義的比較規則函式插入。

使用前向迭代器對集合進行中序遍歷,其結果正好是元素的排序結果

*反向遍歷

使用反向迭代器reverse_iterator可以反向遍歷。注意使用rbegin(), rend()

#include#includeusing namespace std;

int main()

};int main()

};int main()

{ sets;

info info;

info.name = "caicai";

info.score = 80.5;

s.insert(info);

info.name = "ningbo";

info.score = 20.5;

s.insert(info);

info.name = "zhejiang";

info.score = 60.5;

s.insert(info);

set::iterator it;

for(it = s.begin(); it != s.end(); it ++)

cout<<(*it).name<<":"<<(*it).score<

C STL之set集合容器

set集合容器 set集合容器實現了紅黑樹 red black tree 的平衡二叉檢索樹的資料結構,在 插入元素時,它會自動調整二叉樹的排列,把該元素放到適當的位置,以確保每個子樹根節點的鍵值大於左子樹的所有節點的鍵值,而小於右子樹所有節點的鍵值 另外,還得確保根節點左子樹的高度與右子樹的高度相等...

c STL庫容器之集合set

set是stl中一種標準關聯容器,其鍵值就是實值,實值就是鍵值,不可以有重複,所以我們不能通過set的迭代器來改變set的元素的值。它底層使用平衡的搜尋樹 紅黑樹實現,插入刪除操作時僅僅需要指標操作節點即可完成,不涉及到記憶體移動和拷貝,所以效率比較高。set,顧名思義是 集合 的意思,在set中元...

C STL學習 Set集合

set int setlnt 乙個存放int的容器 set float setfloat 乙個存放float的容器 set setstring 乙個存放string的容器insert a 在容器中插入元素 begin 返回容器中第乙個資料的迭代器 end 返回容器中最後乙個資料之後的迭代器 rend...