set的常見用法詳解

2021-08-25 17:19:23 字數 1612 閱讀 1629

set譯為集合,是乙個內部自動有序且不含重複元素的容器

有時出現需要去掉重複元素的情況

而且有可能因這些元素比較大或者型別不是int型而不能直接開雜湊表

在這種情況下就可以用set來保留元素本身而不考慮它的個數

當然上面的情況也可以再開乙個陣列進行下標和元素的對應來解決

但是set提供了更為直觀的介面

並且加入set之後可以實現自動排序

標頭檔案#include

using namespace std;

1、set的定義

setname;

與vector相同,大部分stl都是這樣的

2、set容器的訪問

只能通過迭代器訪問

set::iterator it;

可以通過*it來訪問set裡的元素

除開vector和string之外的stl容器都不支援*(it+i)的訪問方式

只能按以下方式進行列舉

#include#include#include#include#include#includeusing namespace std;

int main()

return 0;

}

不支援it可以發現,set內的元素自動遞增排序,且自動去除了重複元素

3、set常用函式

(1)insert()

insert(x)可將x插入set容器中,並自動遞增排序和去重

(2)find()

find(value)返回set中對應值為value的迭代器

#include#include#include#include#include#includeusing namespace std;

int main()

set::iterator it=find(2);

printf("%d\n",*it);

return 0;

}

(3)erase()

①刪除單個元素

st.erase(st.find(100));

st.erase(value)

value就是所需要刪除的值

②刪除乙個區間內的所有元素

st.erase(first,last)可以刪除乙個區間內的所有元素

[first,last)

set::iterator it=st.find(30);

st.erase(it,st.end());

刪除元素30至set末尾之間的元素

(4)size()

用來獲取set內元素的個數

(5)clear()

用來清空set中的所有元素

4、set的常見用途

set最主要的作用是自動去重並按公升序排序,因此碰到需要去重但是不方便直接開陣列的情況,可以嘗試用set

延伸:set中元素是唯一的,如果需要處理不唯一的情況

則需要使用multiset

c++11標準中還增加了unordered_set

以雜湊代替set內部的紅黑樹

(一種自平衡二叉查詢樹)

使其可以用來處理只去重但不排序的需求

速度比set快很多

知識點來自於《演算法筆記》

set 的常見用法詳解(含定義)

1 set的定義 setname 其定義的寫法和vector基本一樣。如果typename是乙個stl容器,那麼定義時要記得在 符號之間加上空格。set陣列定義和vector相同 2 set容器內元素的訪問 set只能通過迭代器訪問 set iterator it typename指的是定義set時...

set的常見用法

set,是乙個內部自動有序且不含重複元素的容器。單獨定義乙個set setname 其中的typename可以是任何基本型別,例如int double char 結構體等,或者stl裡的標準容器,例如vector set queue等。一些簡單例子如 setname setname set只能通過迭...

set函式常見用法

標頭檔案 include 優勢 內部自動從小到大排序且不含重複元素。定義方式 set typename name 注意 除開vector和string之外的stl容器都不支援 it i 即it i 的訪問方式 遍歷方式 for set typename iterator it st.begin it...