set集合容器實現了紅黑樹(red-black tree)的平衡二叉檢索樹的資料結構,在插入元素時,它會自動調整二叉樹的排列,把該元素放在適當的位置,以確保每個字數根節點的鍵值大於左子樹所有節點 的鍵值,而小於右子樹所有節點的鍵值;另外,還得確保根節點左子樹的高度與右子樹的高度相等,這樣,二叉樹的高度最小,從而檢索速度最快。要注意的是,它不會重複插入相同鍵值的元素,而採取忽略處理。如圖為乙個典型的紅黑樹。
一.元素的插入與中序遍歷(用insert()方法把元素插入集合中去,插入的具體規則在預設的比較規則下,是按元素值由小到大插入,如果自己指定了比較規則函式,則按自定義比較規則函式插入)
1 #include2 #include執行結果3using
namespace
std;
4int
main()
516 cout<
17return0;
18 }
6二.元素的方向遍歷(使用方向迭代器reverse_iterator可以方向遍歷集合,輸出的結果正好是集合元素的反向排序結果。它需要用到rbegin()和rend()兩個方法,它們分別給出了遍歷的開始位置和結束位置)812
1 #include2 #include執行結果3using
namespace
std;
4int
main()
516 cout<
17return0;
18 }
12三.元素的檢索(使用find()方法對集合進行搜尋,如果找到查詢的鍵值,則返回該鍵值的迭代器位置,否則,返回集合最後乙個元素後面的乙個位置,即end())86
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(2)如果元素時結構體,那麼,可以直接把比較函式寫在結構體內。86
1 #include2 #include執行結果3 #include
4using
namespace
std;
5struct
info613
};14
intmain()
1532
return0;
33 }
jack:80.5multiset多重集合容器tomi:
60.5
nacy:
20.5
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 刪...