set和multiset的用法詳解

2021-09-19 01:10:50 字數 2843 閱讀 6900

一、set文件介紹

1. 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中的底層使用二叉搜尋樹(紅黑樹)來實現。

總結一下,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 ...