c set用法簡記

2021-10-23 12:10:40 字數 2450 閱讀 7317

set作為stl中儲存資料的一種容器,底層使用紅黑樹作為內部結構。存入set中的資料具有單一不重複、自動公升序,因此可看做乙個公升序元素的集合。

基本操作如下

set <

int> s;

s.insert

(x)//向s中插入x元素

s.begin()

//返回s中第乙個元素的迭代器

s.end()

//返回s中最後乙個元素的迭代器

s.size()

//返回s中元素個數

s.empty()

//判斷s是否為空

s.find

(x)//返回x的迭代器

s.count

(x)//返回x出現次數

注意的是end()函式返回的實際是最後乙個元素旁邊的迭代器,但當直接使用時仍是最後乙個元素本身,例如

int a[5]

=;set <

int> s;

for(

int i=

0;i<

5;i++

) s.

insert

(a[i]);

set<

int>

::iterator it;

it=s.

end();

cout<<

*it<

輸出結果即是 5

但在find(x)函式中,若查詢的x元素不存在,迭代器將會返回到end(),此時若不加以判斷,則會返回s中的最後乙個元素造成錯誤,因此若使用find()函式可以加上語句

int x;

while

(cin>>x)

輸出結果如下

另一方面,若是想判斷元素是否在set中存在,也可使用count()函式。由於set容器的特點,每個元素x只會在set**現一次,因此count(x)的返回值只有0和1,即返回1則元素x存在,返回0則元素x不存在

貼一道例題

給定兩個整數集合,它們的相似度定義為:n​c​​ /n​t ×100%。其中nc是兩個集合都有的不相等整數的個數,n​t

是兩個集合一共有的不相等整數的個數。你的任務就是計算任意一對給定集合的相似度。

輸入格式:

輸入第一行給出乙個正整數n(≤50),是集合的個數。隨後n行,每行對應乙個集合。每個集合首先給出乙個正整數m(≤104 ),是集合中元素的個數;然後跟m個[0,10​9​​ ]區間內的整數。

之後一行給出乙個正整數k(≤2000),隨後k行,每行對應一對需要計算相似度的集合的編號(集合從1到n編號)。數字間以空格分隔。

輸出格式:

對每一對需要計算的集合,在一行中輸出它們的相似度,為保留小數點後2位的百分比數字。

輸入樣例:

3

3 99 87 101

4 87 101 5 87

7 99 101 18 5 135 18 99

21 2

1 3

輸出樣例:
50.00%

33.33%

解題思路:題意即是判斷給定兩集合交集和並集的比值,用set就可以很方便的解決,開乙個set型陣列分別記錄集合,遍歷查詢即可。確實是因為這道題學習了set的用法。

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

int n;

set <

int> s[

100]

;voidf(

int a,

int b)

}int sum = s[a]

.size()

+ s[b]

.size()

;double t=

(double

)x/(sum-x)

*100

;printf

("%.2lf%%\n"

,t);

}int

main()

} cin>>m;

while

(m--

)return0;

}

拙見至此 歡迎指

C set用法總結

c 中set的用法 set的特性是,所有元素都會根據元素的鍵值自動排序,set的元素不像map那樣可以同時擁有實值 value 和鍵值 key set元素的鍵值就是實值,實值就是鍵值。set不允許兩個元素有相同的鍵值。簡單來說,set集合是c stl庫中自帶的乙個容器,set具有以下兩個特點 1 s...

C set用法詳解

c stl之所以得到廣泛的讚譽,也被很多人使用,不只是提供了像vector,string list等方面的容器,更重要的是stl封裝了許多複雜的資料結構和大量實用的資料結構操作。vector封裝了陣列,list封裝了鍊錶,map和set封裝了二叉樹等,在封裝這些資料結構的時候,stl按照程式設計師的...

C Set常用用法

set集合容器 實現了紅黑樹的平衡二叉檢索樹的資料結構,插入元素時,它會自動調整二叉樹的排列,把元素放到適當的位置,以保證每個子樹根節點鍵值大於左子樹所有節點的鍵值,小於右子樹所有節點的鍵值 另外,還得保證根節點左子樹的高度與右子樹高度相等。平衡二叉檢索樹使用中序遍歷演算法,檢索效率高於vector...