關聯容器(一) set

2021-07-08 17:32:45 字數 3260 閱讀 7490

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元素的排列規則...