set介紹:
set是stl中一種標準關聯容器(vector,list,string,deque都是序列容器,而set,multiset,map,multimap是標準關聯容器),它底層使用平衡的搜尋樹——紅黑樹實現,插入刪除操作時僅僅需要指標操作節點即可完成,不涉及到記憶體移動和拷貝,所以效率比較高。set,顧名思義是「集合」的意思,在set中元素都是唯一的,而且預設情況下會對元素自動進行公升序排列,如果需要集合中的元素允許重複那麼可以使用multiset。
常用函式:
(1) 建構函式/賦值
int array = ;
//setsetint = ; //預設:公升序
//set> setint(array, array + (sizeof(array) / sizeof(int))); //降序
set> setint(array, array+(sizeof(array)/sizeof(int))); //公升序
(2) 增加函式/刪除函式
clear清空set
emplace插入乙個元素(不執行copy或move操作)到set
emplace_hint插入乙個元素(不執行copy或move操作)到set,有位置
erase從set中移除指定位置或範圍的資料
insert在set的指定位置插入一或多個元素(多個過載)
(3) 遍歷函式/訪問函式
begin返回指向set中第乙個元素的迭代器
end返回指向set的結尾位置之後位置的迭代器
cbegin返回指向set中第乙個元素的const迭代器
cend返回指向set的結尾位置之後位置的const迭代器
crbegin返回指向set的反方向開始位置的const迭代器
crend返回指向set的反方向結尾位置之後位置的const迭代器
rbegin返回指向set的反方向開始位置的迭代器
rend返回指向set的反方向結尾位置之後位置的迭代器
lower_bound返回指向set中大於等於指定key的第乙個元素的位置的迭代器
upper_bound返回指向set中大於指定key的第乙個元素的位置的迭代器
equal_range返回迭代器對,表示指定key的lower_bound和upper_bound(first,second)
eg:*setint.equal_range(34).second
(4)查詢/替換/比較
find返回指向set中指定key的元素位置的迭代器
value_comp
返回用於對set的元素排序的比較物件的拷貝
key_comp
返回用於對set的key排序的比較物件的拷貝
(5) 判斷函式
empty如果set為空,返回true
(6) 大小函式/個數函式
count返回set中【指定鍵】對應的元素個數
max_size返回set的最大長度
size返回set中的元素個數
(7) 其他函式
get_allocator返回建立set的allocator的拷貝
operator=使用另乙個set的拷貝替換set中的元素
swap交換兩個set中的元素
說一說value_comp和key_comp:
key_comp用來比較key大小,value_comp用來比較value大小。
對set來說,key和value是一回事,兩個東西等價。
對map來說,比如map,key的型別是***,value的型別是pair。key_comp就是用來比較***型別的值的東西,value_comp就是用來比較pair的東西。但是value_comp的比較方式跟key_comp是一樣的。pair裡只有***會被比較,yyy不參與比較。
**:
int array = ;
set> setint(array, array+(sizeof(array)/sizeof(int))); //公升序
cout << setint.value_comp()(7, 8) << endl; //true:1
cout << setint.value_comp()(8, 7) << endl; //false:0
cout << setint.key_comp()(7, 8) << endl; //true:1
cout << setint.key_comp()(8, 7) << endl; //false:0
示例**:
#include #include #include //greater必須包含此檔案
using namespace std;
int _tmain(int argc, _tchar* argv)
; //setsetint = ; //預設:公升序
//set> setint(array, array + (sizeof(array) / sizeof(int))); //降序
set> setint(array, array+(sizeof(array)/sizeof(int))); //公升序
setint.emplace_hint(setint.begin(), 999);
cout <<"setint.count"<< setint.count(999) << endl;
cout << "setint.size" << setint.size() << endl;
cout << "setint.max_size" << setint.max_size() << endl;
cout << "setint.lower_bound(34);:" << *setint.lower_bound(34) << endl;
cout << "setint.upper_bound(34);:" << *setint.upper_bound(34) << endl;
cout << "setint.equal_range(34);:" << *setint.equal_range(34).second << endl;
cout << "setint.find(34);:" << *setint.find(34) << endl;
set::iterator iter;
for (iter = setint.begin(); iter != setint.end(); iter++)
return 0;
}
set方法使用示例,參考: 關聯容器 set
set容器用來儲存同一資料型別的資料,並且能從乙個資料集合中取出資料,在set中每個元素的值都唯一,而且系統能根據元素的值自動進行排序,set元素的值不能直接被改變。set容器內部採用一種非常高效平衡檢索二叉樹 紅黑樹 mset.begin 返回set容器的第乙個元素的迭代器 mset.end 返回...
關聯容器之set與multiset
include include include include using namespace std 關聯容器之set與multiset set集合容器,實際是一棵樹,每棵子樹的左結點小於根節點的值,而根節點的值小於右節點的值,整棵樹可以用中序遍歷得到乙個 set的元素不能重複,multiset的...
關聯式容器 set和multiset
set的特性是,所有的元素都會根據元素的鍵值自動排序。set的元素不像map那樣可以同時擁有實值 value 和鍵值 key set元素的鍵值就是實值,實值就是鍵值。set不允許兩個元素擁有相同的鍵值。不能通過set的迭代器改變set的元素值,因為set元素的值就是其鍵值,關係到set元素的排列規則...