c STL庫容器之集合set

2021-08-18 06:55:47 字數 2476 閱讀 4562

set是stl中一種標準關聯容器,其鍵值就是實值,實值就是鍵值,不可以有重複,所以我們不能通過set的迭代器來改變set的元素的值。它底層使用平衡的搜尋樹——紅黑樹實現,插入刪除操作時僅僅需要指標操作節點即可完成,不涉及到記憶體移動和拷貝,所以效率比較高。set,顧名思義是「集合」的意思,在set中元素都是唯一的,而且預設情況下會對元素自動進行公升序排列,支援集合的交(set_intersection),差(set_difference) 並(set_union),對稱差(set_symmetric_difference) 等一些集合上的操作,如果需要集合中的元素允許重複那麼可以使用multiset。

setseta;

cout << "初始化前set的大小:" << seta.size() << endl;

cout << "初始化前set是否為空: " << seta.empty() << endl;

//初始化set

//用insert函式初始化

for(int i = 0; i < 10; i++)

/*//這裡也可以使用陣列來賦值進行初始化

int a[10] = ;

setseta(a,a+10);

*/cout << "初始化後set的大小:" << seta.size() << endl;

cout << "初始化後set是否為空: " << seta.empty() << endl;

set.begin()      返回set容器的第乙個元素

set.end()      返回set容器的最後乙個元素

set.clear() 刪除set容器中的所有的元素

set.empty()     判斷set容器是否為空

set.insert() 插入乙個元素

set.erase() 刪除乙個元素

set.size()     返回當前set容器中的元素個數

這裡我們介紹幾個函式

1. find

查詢乙個元素,如果容器中不存在該元素,返回值等於seta.end()
//使用find時要與end()進行比較

//測試find函式

if(seta.find(0) == seta.end())

else

if(seta.find(11) != seta.end())

else

2. erase

seta.erase()       刪除乙個元素

seta.clear() 刪除set容器中的所有的元素

//測試erase函式

seta.erase(9);

cout << "刪除9之後seta的值: " << endl;

print(seta);

3. insert

//測試插入函式insert

int a[5] = ;

seta.insert(a,a+5);

cout << "插入後seta的值: " << endl;

print(seta);

#include #include using namespace std;

//抽象乙個函式,用來輸出集合set中的值

void print(setseta)

}int main()

/*//這裡也可以使用陣列來賦值進行初始化

int a[10] = ;

setseta(a,a+10);

*/cout << "初始化後set的大小:" << seta.size() << endl;

cout << "初始化後set是否為空: " << seta.empty() << endl;

print(seta);

//測試find函式

if(seta.find(0) == seta.end())

else

if(seta.find(11) != seta.end())

else

//測試erase函式

seta.erase(9);

cout << "刪除9之後seta的值: " << endl;

print(seta);

//測試插入函式insert

int a[5] = ;

seta.insert(a,a+5);

cout << "插入後seta的值: " << endl;

print(seta);

return 0;

}

執行結果

C STL之Set集合容器

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

C STL之set集合容器

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

c STL庫容器之map

map是stl的乙個關聯容器,它的特點是增加和刪除節點對迭代器的影響很小,除了那個操作節點,對其他的節點都沒有什麼影響。對於迭代器來說,可以修改實值,而不能修改key。它提供一對一 其中第乙個可以稱為關鍵字,每個關鍵字只能在map中出現一次,第二個可能稱為該關鍵字的值 的資料處理能力,由於這個特性,...