💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# :-: **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)