set是stl中一種標準關聯容器。它底層使用平衡的搜尋樹——紅黑樹實現,插入刪除操作時僅僅需要指標操作節點即可完成,不涉及到記憶體移動和拷貝,所以效率比較高。
set顧名思義是「集合」的意思,在set中元素都是唯一的,而且預設情況下會對元素自動進行公升序排列,支援集合的交(set_intersection),差(set_difference) 並(set_union),對稱差(set_symmetric_difference) 等一些集合上的操作,如果需要集合中的元素允許重複那麼可以使用multiset。
使用時注意包含標頭檔案std::set and std::multiset associative containers
s.begin() 返回set容器的第乙個元素
s.end() 返回set容器的最後乙個元素
s.clear() 刪除set容器中的所有的元素
s.empty() 判斷set容器是否為空
s.insert() 插入乙個元素
s.erase() 刪除乙個元素
s.size() 返回當前set容器中的元素個數
template , class alloc=stl_default_allocator(key) >
#include #include #include using namespace std;
sets;
int main();
setsetc(a,a+5); //陣列a初始化乙個set;
setsetd(setc.begin(),setc.end()); //setc初始化乙個set
//上述兩例均為區間初始化
setsete(setd); //拷貝構造建立set
return 0;
}
#include #include using namespace std;
sets;
void setprint(int cnt)
int main();
s.insert(a,a+4); //將區間[a, a+4]裡的元素插入容器
s.erase() 刪除乙個元素
s.clear() 刪除set容器中的所有的元素
#include #include using namespace std;
sets;
void setprint(int cnt)
int main()
setprint(cnt++);
s.erase(9); //根據元素刪除
setprint(cnt++);
set::iterator ita = s.begin();
set::iterator itb = s.begin();
s.erase(ita); //刪除迭代器指向位置的元素
setprint(cnt++);
ita = s.begin();
itb = s.begin();
itb++;itb++;
s.erase(ita,itb); //刪除區間[ita,itb)的元素
setprint(cnt);
s.clear();
return 0;
}
s.find() 查詢乙個元素,如果容器中不存在該元素,返回值等於s.end()
#include #include using namespace std;
};sets; //自定義排序函式構造set
s.lower_bound() 返回第乙個大於或等於給定關鍵值的元素
s.upper_bound() 返回第乙個大於給定關鍵值的元素
s.equal_range() 返回一對定位器,分別表示 第乙個大於或等於給定關鍵值的元素 和 第乙個大於給定關鍵值
的元素,這個返回值是乙個pair型別,如果這一對定位器中哪個返回失敗,就會等於
C Set常用用法
set集合容器 實現了紅黑樹的平衡二叉檢索樹的資料結構,插入元素時,它會自動調整二叉樹的排列,把元素放到適當的位置,以保證每個子樹根節點鍵值大於左子樹所有節點的鍵值,小於右子樹所有節點的鍵值 另外,還得保證根節點左子樹的高度與右子樹高度相等。平衡二叉檢索樹使用中序遍歷演算法,檢索效率高於vector...
C Set常用用法
set集合容器 實現了紅黑樹的平衡二叉檢索樹的資料結構,插入元素時,它會自動調整二叉樹的排列,把元素放到適當的位置,以保證每個子樹根節點鍵值大於左子樹所有節點的鍵值,小於右子樹所有節點的鍵值 另外,還得保證根節點左子樹的高度與右子樹高度相等。平衡二叉檢索樹使用中序遍歷演算法,檢索效率高於vector...
C Set常用用法
set集合容器 實現了紅黑樹的平衡二叉檢索樹的資料結構,插入元素時,它會自動調整二叉樹的排列,把元素放到適當的位置,以保證每個子樹根節點鍵值大於左子樹所有節點的鍵值,小於右子樹所有節點的鍵值 另外,還得保證根節點左子樹的高度與右子樹高度相等。平衡二叉檢索樹使用中序遍歷演算法,檢索效率高於vector...