set 集合容器

2022-07-23 06:06:14 字數 2032 閱讀 1038

set集合容器實現了紅黑樹(red-black tree)的平衡二叉檢索樹的資料結構,在插入元素時,它會自動調整二叉樹的排列,把該元素放在適當的位置,以確保每個字數根節點的鍵值大於左子樹所有節點 的鍵值,而小於右子樹所有節點的鍵值;另外,還得確保根節點左子樹的高度與右子樹的高度相等,這樣,二叉樹的高度最小,從而檢索速度最快。要注意的是,它不會重複插入相同鍵值的元素,而採取忽略處理。如圖為乙個典型的紅黑樹。

一.元素的插入與中序遍歷(用insert()方法把元素插入集合中去,插入的具體規則在預設的比較規則下,是按元素值由小到大插入,如果自己指定了比較規則函式,則按自定義比較規則函式插入)

1 #include2 #include

3using

namespace

std;

4int

main()

516 cout<

17return0;

18 }

執行結果

6

812

二.元素的方向遍歷(使用方向迭代器reverse_iterator可以方向遍歷集合,輸出的結果正好是集合元素的反向排序結果。它需要用到rbegin()和rend()兩個方法,它們分別給出了遍歷的開始位置和結束位置)

1 #include2 #include

3using

namespace

std;

4int

main()

516 cout<

17return0;

18 }

執行結果

12

86

三.元素的檢索(使用find()方法對集合進行搜尋,如果找到查詢的鍵值,則返回該鍵值的迭代器位置,否則,返回集合最後乙個元素後面的乙個位置,即end())

1 #include2 #include

3using

namespace

std;

4int

main()

5

執行結果

6

no find it

四.自定義比較函式

編寫比較函式有兩種方法:

(1)如果元素不是結構體,那麼,可以編寫比較函式。下面這個程式編寫的比較規則是要求按鍵值由大到小的順序將元素插入到集合中。

1 #include2 #include

3using

namespace

std;

4struct

mycomp//自定義比較函式mycomp,過載「()」操作符58

};9intmain()

1020 cout<

21return0;

22 }

執行結果

12

86

(2)如果元素時結構體,那麼,可以直接把比較函式寫在結構體內。

1 #include2 #include

3 #include

4using

namespace

std;

5struct

info613

};14

intmain()

1532

return0;

33 }

執行結果

jack:80.5

tomi:

60.5

nacy:

20.5

multiset多重集合容器

multiset與set一樣,也是使用紅黑樹來組織元素資料的,唯一不同的是,multiset允許重複的元素鍵值插入,而set則不允許。如圖為multiset容器內部結構示意圖

multiset也需宣告標頭檔案包含"#include"

set 集合容器

簡單學習一下set集合容器 標頭檔案 include using namespace std sets 必須是有定義 運算子的型別 int,string 向s中加資料 s.insert elem 插入elem之後元素預設按公升序排序,集合中是沒有重複元素的,每個不同的元素只存乙個 s.clear 清...

set集合容器

set集合容器 set的定義 set容器的標頭檔案 include 定義 set 鍵值 s set的優缺 1.set容器的檢索使用中序遍歷演算法,檢索效率高於vector deque list等容器。2.set容器會對插入的元素按照鍵值由小到大的順序排序。3.set集合的主要目的就是為了快速檢索。4...

set集合容器

set集合容器 呼叫標頭檔案 includeusing namespace std 詳細用法 部分 sett 定義乙個int型別的容器,注意set裡的每個元素只會出現1次 t.insert k 插入元素k,多次插入同乙個元素後面無效 t.count k 判斷元素k是否在容器內 t.erase k 刪...