# :-: **Set**
* set跟vector差不多,它跟vector的唯一区别就是,set里面的元素是有序的且唯一的,只要你往set里添加元素,它就会自动排序,而且,如果你添加的元素set里面本来就存在,那么这次添加操作就不执行。要想用set先加个头文件set。
`#include <set>`
* 注意
1. set中的元素都是排好序的
2. set集合中没有重复的元素
## **Set初始化**
```
set <int > se ;
set <char > se ;
set <int > S [ MAXN ]
```
## **Set相关操作**
* se . begin () 返回指向第一个元素的迭代器
* se . clear () 清除所有元素
* se . count () 返回某个值元素的个数
* se . empty () 如果集合为空,返回true
* se . end () 返回指向最后一个元素之后的迭代器,不是最后一个元素
* se . erase () 删除集合中的元素
* se . find () 返回一个指向被查找到元素的迭代器
* se . insert () 在集合中插入元素
* se . max_size () 返回集合能容纳的元素的最大限值
* se . size () 集合中元素的数目
* se . swap () 交换两个集合变量
## **遍历**
set的遍历同样需要迭代器,具体如下:
`for( set <int>:: iterator z = se . begin (); z != se . end (); z ++)
`
迭代器的类型要和所定义的set类型相同。
### 举个例子
给你两个集合,要求A + B. 注:同一个集合中不会有两个相同的元素.每组输入数据分为三行,第一行有两个数字n, m(0 < n, m <= 10000),分别表示集合A和集合B的元素个数.后两行分别表示集合A和集合B.每个元素为不超出int范围的整数,每个元素之间有一个空格隔开.
针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开
Sample Input
1 2
1
2 3
Sample Output
1 2 3
[原题](http://acm.hdu.edu.cn/showproblem.php?pid=1412)
**代码**
```
#include <stdio.h>
#include <set>
int main()
{
int i,j,n,m,x,t,p;
while(~scanf("%d%d",&n,&m)){
set<int> s;
for(i=0;i<n;i++){
scanf("%d",&x);
s.insert(x);
}
for(i=0;i<m;i++){
scanf("%d",&x);
s.insert(x);
}
set<int>::const_iterator p;
t=1;
for(p=s.begin();p!=s.end();p++){
if(t==1){
printf("%d",*p);
t=0;
}
else printf(" %d",*p);
}
printf("\n");
}
return 0;
}
```
* set在去重方面有很好的效果。
## **小练习**
[不重复数字](https://www.lydsy.com/JudgeOnline/problem.php?id=2761)
- 简介
- 零基础快速入门ACM
- C语言快速入门
- C语言快速入门
- C/C++基础
- 输入输出
- 数组和字符串
- 数组
- 字符数组
- 函数和递归
- C++标准容器库(STL)
- Vector
- Map
- Set
- String
- Stack
- Queue
- Priority_queue
- 贪心
- 硬币问题
- 区间调度问题
- 字典序最小问题
- 独木舟问题
- 搜索
- DFS
- BFS
- 剪枝
- 记忆化搜索
- 常用技巧
- 倍增
- 高精度
- 大数加法
- 大数减法
- 大数乘法
- 大数除法
- 大数阶乘
- 输入挂
- 前缀和
- 二分
- 本地预处理
- 尺取
- 枚举
- 坐标离散化
- 分治
- 数列分治
- 树上分治
- 平面分治
- 计算几何
- 凸包
- 点积
- 叉积
- 线段关系
- 皮克定理
- 最近点对
- 数据结构
- 线段树
- 树状数组
- 并查集
- 动态规划
- 基础知识
- 信息学竞赛中的动态规划
- 动态规划初步
- 最长上升子序列(LIS)
- 最长公共子序列(LCS)
- 最大子段和
- 背包问题
- 部分背包
- 0 1 背包
- 完全背包
- 多重背包
- 背包的可行性问题
- 线性DP
- 树形DP
- 区间DP
- 数位DP
- 动态规划优化
- 字符串
- KMP算法
- 拓展KMP
- 字符串Hash
- Manacher算法
- 后缀数组
- Trie树
- 博弈论
- Nim博弈
- Bash博弈
- 斐波那契博弈
- 威佐夫博弈
- SG函数
- 数论
- 整数研究
- 素数判断
- 素数筛选
- 快速幂
- 算数基本定理
- 最大公约数(Gcd)
- 费马小定理
- 扩展欧几里得
- 逆元
- 同余定理
- 组合数学
- 容斥原理
- 抽屉原理
- 卢卡斯(Lucas)
- 卡特兰(Catalan)
- 著名函数
- 欧拉函数
- 莫比乌斯函数
- 线性代数
- 矩阵运算
- 矩阵快速幂
- 图论
- 存图方法
- 邻接矩阵
- 邻接表
- Vector存图
- 链式前向星
- 图的遍历
- 拓扑排序
- 最短路
- Dijkstra算法
- SPFA算法
- Floyed 算法
- 最小生成树
- Prim算法
- Kruskal算法
- 最近公共祖先 (LCA)
- 二分图匹配
- 网络流
- 其他
- 莫队