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)的訪問方式
只能按以下方式進行列舉
不支援it可以發現,set內的元素自動遞增排序,且自動去除了重複元素#include#include#include#include#include#includeusing namespace std;
int main()
return 0;
}
3、set常用函式
(1)insert()
insert(x)可將x插入set容器中,並自動遞增排序和去重
(2)find()
find(value)返回set中對應值為value的迭代器
(3)erase()#include#include#include#include#include#includeusing namespace std;
int main()
set::iterator it=find(2);
printf("%d\n",*it);
return 0;
}
①刪除單個元素
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...