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...