強大的set容器
前言
建議先看STL裡的map,該文章中的set只是對STL的一種補充,事實上map的功能比set強大很多,基本上用set能實現的功能用map也能實現
基本函式
用法 | 作用 |
---|---|
s.begin(), s.end() | 返回集合的首尾迭代器 |
s.insert(k) | 向集合中加入元素k |
s.earse(k) | 刪除集合中元素k |
s.size() | 返回當前集合的元素個數 |
s.find(k) | 返回集合中指向元素k的迭代器。如果不存在這個元素,就返回s.end() |
s.empty() | 返回當前集合是否為空,是返回1,否則返回0 |
s.clear() | 清空當前集合。 |
s.upper_bound() | 返回一個鍵值大於k的第一個元素的迭代器 |
s.lower_bound | 返回一個鍵值大於等於k的第一個元素的迭代器 |
用法與map大量相似,這裡只簡單介紹下二者的區別
查詢值
set不像map有鍵值和value,需要用it->first和it->second來返回對應的鍵值和value。set只有一個數值,取其數值只需要對迭代器進行取值符號即可
int main(){
set<int>::iterator it;
for(it=s.begin();i!=s.end();it++)cout<<*it<<" ";
return 0;
}
二分查詢的函式
set支援lower_bound和upper_bound函式,可以查詢鍵值大於k的第一個元素的迭代器
int main(){
set<int>::iterator it;
it=s.lower_bound(k);
cour<<*it;
return 0;
}
事實上也可以用另一種方法實現,就是先將k插入,然後去查詢k所對應的迭代器的下一位,返回其值並將k刪除即可
set<int>s;
int main(){
set<int>::iterator it;
if(s.find(k)!=s.end()){
it=s.find(k);
it++;
cout<<*it;
}
else {
s.insert(k);
it=s.find(k);
it++;
cout<<*it;
s.erase(k);
}
return 0;
}
個人理解
map一般用來實現有關字串的對應值問題,而set更加關注數字集合的關係,使用set一般是為了解決兩個問題:去重和排序
不再展示其用法
思考一個問題
使用set會自動排序,如果我只想去重,不想排序怎麼辦??
相關文章
- Scala——三個容器:List Set Map
- Laravel框架的基石就是一個功能強大的 IoC 容器Laravel框架
- set容器幾個關鍵函式函式
- 又一個強大的PHP5.3依賴注入容器PHP依賴注入
- Java知識點總結(Java容器-Set)Java
- C++進階(map+set容器模擬實現)C++
- 強大的ognl
- 大前端JS篇之搞懂【Set】前端JS
- Java容器(List、Set、Map)知識點快速複習手冊Java
- 容器安全的三大挑戰
- 強大的Github ActionsGithub
- android強大的SpannableStringBuilderAndroidUI
- awk的強大操作
- 強大的 VS Code
- API閘道器為K8s容器應用叢集提供強大的接入能力APIK8S
- Vue.set與vue.$set的使用Vue
- 好程式設計師Java培訓Java容器類List和Set分析程式設計師Java
- vim之強大的global
- 強大的 Guava 工具類Guava
- 強大的CAS機制
- alter system set event和set events的區別
- 國產工具好強大-一個可以允許小程式執行在任意APP的容器技術APP
- 邁入Docker、Kubernetes容器世界的大門Docker
- Spring框架中的容器以及兩大特性Spring框架
- 容器的六大理解誤區
- vue的set apiVueAPI
- 強大的動態 LINQ 庫
- 威力強大的Linux sudo 命令Linux
- GoFrame - 強大的工具鏈集合GoFrame
- 向強大的SVG邁進SVG
- Chrome的強大搜尋功能Chrome
- 簡單又強大的SHELL
- 強大的Array.prototype.splice()
- 強大的Stream並行流並行
- c++ set容器 —構造 賦值 大小 交換 插入 刪除 程式碼示例C++賦值
- 併發容器的原理,七大併發容器詳解、及使用場景
- Set
- set /?