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中出現一次,第二個可能稱為該關鍵字的值 的資料處理能力,由於這個特性,...