1. 簡(jiǎn)介
數(shù)學(xué)中的集合
No. | 特性 | 說(shuō)明 |
---|---|---|
1 | 確定性 | 給定一個(gè)集合掌动,任給一個(gè)元素德澈,該元素或者屬于或者不屬于該集合挣棕,二者必居其一译隘。 |
2 | 互異性 | 一個(gè)集合中,任何兩個(gè)元素都認(rèn)為是不相同的洛心,即每個(gè)元素只能出現(xiàn)一次固耘。有時(shí)需要對(duì)同一元素出現(xiàn)多次的情形進(jìn)行刻畫(huà),可以使用多重集词身。 |
3 | 無(wú)序性 | 一個(gè)集合中厅目,每個(gè)元素的地位都是相同的,元素之間是無(wú)序的法严。集合上可以定義序關(guān)系损敷,定義了序關(guān)系后,元素之間就可以按照序關(guān)系排序深啤。但就集合本身的特性而言拗馒,元素之間沒(méi)有必然的序。 |
2. 操作
set
特點(diǎn)值唯一溯街。
2.1 初始化
- 默認(rèn)構(gòu)造(可帶參數(shù))
- 復(fù)制構(gòu)造
- 范圍賦值構(gòu)造
2.2 基本操作
- 迭代器
迭代器 | 作用 |
---|---|
c.begin() |
頭迭代器 |
c.end() |
尾迭代器 |
c.rbegin() |
反向頭迭代器 |
c.rend() |
反向尾迭代器 |
與vector
相似诱桂。
- 數(shù)據(jù)量操作
函數(shù) | 作用 |
---|---|
c.size() |
大小 |
c.max_size() |
最大大小 |
c.empty() |
判空 |
c.clear() |
清空 |
2.3 添加數(shù)據(jù)
-
insert
插入數(shù)據(jù)
#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
void Display(int val){
cout << val << endl;
}
int main(){
set<int> m;
for(int i=0;i<10;i++){
m.insert(i);
}
for_each(m.begin(),m.end(),Display);
}
通過(guò)返回值pair<iterator,bool>
判斷插入數(shù)據(jù)是否成功。
-
insert
指定位置插入數(shù)據(jù)
#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
void Display(int val){
cout << val << endl;
}
int main(){
set<int> m;
for(int i=0;i<10;i++){
m.insert(i);
}
m.insert(m.begin(),100);
for_each(m.begin(),m.end(),Display);
}
插入數(shù)據(jù)總是認(rèn)為成功,如果已經(jīng)存在呈昔,則返回已經(jīng)存在的位置迭代器挥等,否則,添加新的值堤尾,且返回位置迭代器肝劲。
-
insert
插入范圍數(shù)據(jù)
2.4 遍歷
- 迭代器
for
循環(huán)
for(set<int>::iterator it = m.begin();it != m.end();it++){
cout << *it << endl;
}
-
for_each()
循環(huán)[推薦]
定義函數(shù)指針
inline void Display(int val){
cout << val << endl;
}
執(zhí)行for_each
for_each(m.begin(),m.end(),Display);
- C++11
auto
迭代器寫(xiě)法
for(auto it = m.begin();it != m.end();it++){
cout << *it << endl;
}
- C++11 for-loop-scope迭代器寫(xiě)法[推薦]
for(auto p : m){
cout << p << endl;
}
- C++11
for_each()
與lamdba表達(dá)式
for_each(m.begin(),m.end(),[](int p){
cout << p << endl;
});
2.5 查找
-
count()
判斷值是否存在
if(m.count(val) == 1){
...
}
-
find()
判斷值是否存在以及位置
set<int>::iterator it = m.find(val);
if(m.end() != it){
...
}
2.6 區(qū)域查找
成員變量 | 作用 |
---|---|
m.lower_bound(val) |
val 下邊界 |
m.upper_bound(val) |
val 上邊界 |
m.equal_range(val) |
val 上下邊界 |
2.7 刪除
- 關(guān)鍵字刪除
m.erase(val);
- 迭代器刪除
m.erase(m.begin());
- 區(qū)域刪除
m.erase(it_a,it_b);
2.8 排序
默認(rèn)按照val
升序排列。自定義排序時(shí)郭宝,可以在實(shí)例化加上val
的comp
仿函數(shù)或者重載<
運(yùn)算符辞槐。
set<value類型,comp> m;
3. 實(shí)例
- 如何把一個(gè)
map
的key
拆成一個(gè)set
- 如何把一個(gè)
set
和一個(gè)vector
組成一個(gè)map