一、set文件介紹
1. set是按照一定次序儲存元素的容器總結一下,set最重要的幾個功能:2. 在set中,元素的value也標識它(value就是key,型別為t),並且每個value必須是唯一的。set中的元素 不能在容器中修改(元素總是const),但是可以從容器中插入或刪除它們。
3. 在內部,set中的元素總是按照其內部比較物件(型別比較)所指示的特定嚴格弱排序準則進行排序。
4. set容器通過key訪問單個元素的速度通常比unordered_set容器慢,但它們允許根據順序對子集進行直 接迭代。
5. set在底層是用二叉搜尋樹(紅黑樹)實現的。
注意:1. 與map/multimap不同,map/multimap中儲存的是真正的鍵值對,set中只放value,但在底層實際存放的是由構成的鍵值對。
2. set中插入元素時,只需要插入value即可,不需要構造鍵值對。
3. set中的元素不可以重複(因此可以使用set進行去重)。
4. 使用set的迭代器遍歷set中的元素,可以得到有序序列
5. set中的元素預設按照小於來比較
6. set中查詢某個元素,時間複雜度為:$log_2 n$
7.set中的元素不允許修改(底層使用二叉搜尋樹實現的)
8. set中的底層使用二叉搜尋樹(紅黑樹)來實現。
1、判斷在還是不在
2、去重
3、排序
二、set常用介面舉例
1、排序+去重
void test()
; sets(array, array + sizeof(array) / sizeof(int));
set::iterator it = s.begin();
while (it != s.end())
cout << endl;
}int main()
輸出結果:
2、插入元素的時候,元素已經存在的不插入
void test()
; sets(array, array + sizeof(array) / sizeof(int));
s.insert(2);
s.insert(3);
s.insert(9);
s.insert(10);
set::iterator it = s.begin();
while (it != s.end())
cout << endl;
}
輸出結果:
3、構建鍵值對插入:pair insert ( const value_type& x )
在set中插入元素x,實際插入的是構成的鍵值對, 如果插入成功,返回(該元素在set中的位置,true),如果插入失敗,說明x在set中已經存在,返回(x在set中的位 置,false).
void test()
; sets(array, array + sizeof(array) / sizeof(int));
set::iterator it;
pair::iterator, bool> ret;
ret = s.insert(1);
if (ret.second == false)
s.insert(it,2);
s.insert(it,3);
s.insert(it,9);
s.insert(it,10);
while (it != s.end())
cout << endl;
}
輸出結果:
4、iterator insert ( iterator position, const value_type& x)
三、與multiset的區別
1、set與multiset最大的區別是multiset中的元素可以重複
下面舉例說明:
void test()
; multisets(array, array + sizeof(array) / sizeof(int));
s.insert(2);
s.insert(3);
s.insert(9);
s.insert(10);
for (auto& e:s)
cout << endl;
}
輸出結果:
所以排序的時候選擇multiset較為方便。
2、使用multiset查詢重複元素時,找到的是中序訪問的第乙個元素
下面用一段**舉例說明:
void test()
; multisets(array, array + sizeof(array) / sizeof(int));
multiset::iterator it = s.begin();
while (it != s.end())
cout 輸出結果:
因為multiset底層是乙個搜尋二叉樹,按中序遍歷剛好是排完序的,由輸出結果可知,找到的是中序遍歷的第乙個數。
set和multiset容器簡介
set和multiset容器簡介 開發工具與關鍵技術 c visualstudioset 是乙個集合容器,其中所包含的元素是唯一的,集合中的元素按一定的順序排列。它其他的 容器不同,它是不能指定位置插入的,它的元素插入過程是按排序規則插入的。set雖然不能指定位置插入,但是在插入和刪除操作較快,因為...
set和multiset小練習
set容器小練習.cpp 此檔案包含 main 函式。程式執行將在此處開始並結束。題目 include include include include using namespace std struct calltable void calltable init const string name...
c 的 set 和 multiset 容器
set和multiset會根據特定的排序準則,自動將元素進行排序。不同的是後者允許元素重複而前者不允許。需要包含標頭檔案 include set和multiset都是定義在std空間裡的類模板 template kty,class pr less kty class alloc allocator ...