C STL容器篇set和multiset

2021-10-23 05:53:34 字數 2657 閱讀 1910

set和multiset和特點:通常底層由紅黑樹實做而成,會將放入的元素自動排序,所以其優點為搜尋元素時具有良好的效能,使用時需包含標頭檔案set,開啟std命名空間。

set和multiset不同之處:set不能放相同的元素,重複放入相同的元素只會放入乙個,multiset可以放入相同的元素。

set和multiset的迭代器型別:雙向迭代器

set和multiset的初始化

template

<

classt,

class

compare

=less

,class

allocator

= allocator>

class

set;

template

<

classt,

class

compare

=less

,class

allocator

= allocator>

class

multiset

;//第一引數元素型別,第二引數排序準則應傳入乙個仿函式,第三引數分配器

//通常沒有特殊要求只需指定第一引數型別

//若需相反的排序準則,可包含#include呼叫greater

setc;

setc1;

set<

int>c=

;//列表初始化

setc1(c2)

;//將c2的元素副本賦值給c1

setc1(iterator1,iterator2)

//將[iterator1,iterator2)元素副本賦值給c1c.~

set();

//銷毀所有元素,釋放記憶體

multiset--

--set 同上

非變動性操作函式

效果c.size()

返回容器的大小

c.empty()

判斷容器是否為空

c.max_size()

返回可容納的最大元素數量(一般不用)

c1==c2

c1!=c2

c1c1>c2

c1<=c2

c1>=c2

比較操作以字典順序來比較,比較只能用於模板引數型別都一樣的容器。

搜尋操作函式

效果c.count(elem)

返回元素elem的個數

c.find(elem)

返回指向元素值為elem的第乙個元素iterator,如果找不到就返回c.end()

c.lower-bound(elem)

返回第乙個大於等於elem值的元素位置的迭代器

c.upper_bound(elem)

返回第乙個大於elem值的元素位置的迭代器

c.equal_range(elem)

返回第乙個大於等於elem值的元素位置的迭代器,和大於elem的迭代器,返回型別為pair將兩個迭代器組合

賦值操作

功能c1=c2

將c2的所有元素的副本新增到c1

c1.swap(c2)

交換c1,c3的所有元素

swap(c1,c2)

效果同上,但效率不好,應該該版本是泛化版本

迭代器函式

效果c.begin()

返回乙個雙向迭代器,指向第乙個元素

c.end()

返回乙個雙向迭代器,指向最後乙個元素的下一位置

c.rbegin()

返回乙個逆向迭代器,指向逆向遍歷的第乙個元素

c.rend()

返回乙個逆向迭代器,指向逆向遍歷的最後乙個元素的下一位置

這裡的迭代器是雙向迭代器,所以對於使用隨機存放迭代器的stl演算法,set和multiset無法使用,對於迭代器來說,所有元素都被視為常數,這確保使用者不會人為的改變元素值,從而打亂既定順序。如果我們要操作容器的元素只能呼叫容器提供的成員函式。

set和multiset的安插,移除操作函式

效果c.insert(elem)

安插乙份elem的副本,如果c為set,返回乙個pair<>將iterator和bool組合在一起的型別,其中第乙個引數指向插入元素,第二引數返回是否插入成功,multiset則返回乙個指向插入元素的iterator

c.insert(iterator,elem)

效果同上,iterator為提示插入位置,若有效可以大大減少插入時間,返回指向插入元素的iterator

c.insert(iterator1,iterator2)

將區間[)內容副本插入c中,無返回值

c.erase(elem)

移除所有與elem相等的元素返回被移除元素的個數,返回型別 set<>::size_type

c.erase(iterator)

移除迭代器指向位置的元素,返回指向下一元素的迭代器

c.erase(iterator1,iterator2)

移除區間[iterator1,iterator2)移除區間內所有元素,返回iterator2迭代器

c.clear()

將容器清空

c STL容器(2)set容器

set翻譯為集合,是乙個內部自動有序且不含重複元素的容器 set的定義 set typename name set int vi set double vi set char vi set vi node可以是結構體 set int a 100 陣列裡面每個元素都是乙個set集合insert x 將...

C STL之Set集合容器

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

C STL中的容器 Set

set跟vector差不多,它跟vector的唯一區別就是,set裡面的元素是有序的且唯一的,只要你往set裡新增元素,它就會自動排序,而且,如果你新增的元素set裡面本來就存在,那麼這次新增操作就不執行。要想用set先加個頭檔案set。其中數值型按照從小到大排列 字元型按照字典序排列 includ...