集合set:每个元素最多只出现一次,并且set中的元素已经从小到大排好序。
1.头文件include<set>
2. begin() 返回set容器的第一个元素的地址,想取元素就要加*
3.end() 返回set容器的最后一个元素 后的地址,加*不是最后一个元素
4.clear() 删除set容器中的所有的元素
5.empty() 判断set容器是否为空,返回布尔类型
6.max_size() 返回set容器可能包含的元素最大个数,按字节算的,long long和double的最大元素个数一样,int和float一样
7.size() 返回当前set容器中的元素个数,在c++中也可以当做判断集合是否为空的标准
8.insert(a) 插入元素,会自动排序
9.find(a)(不实用)如果找得到,返回元素的迭代器,找不到就返回se.end(), (最后一个元素的下一个位置,se为set的变量名)
10.count(a) 如果存在元素,返回1,否则返回0,相当于判断元素存不存在
11.erase(a)删除集合中的元素a erase(it)删除集合中it迭代器处的元素 erase(it1,it2) 删除从迭代器it1到it2之间的元素
12.遍历输出迭代器,类似指针,当做是专门用在stl里面的就行
代码举例:
#include<stdio.h> #include<iostream> #include<set> using namespace std; int main() { set<int>se; se.insert(-5); se.insert(-1); se.insert(3); se.insert(1); se.insert(1);///重复插入 se.insert(7); se.insert(5);///无序插入 printf("now size =%d ",se.size()); ///遍历输出是有序的 for(set<int>::iterator it=se.begin();it!=se.end();it++) printf("%d ",*it); printf(" "); printf("it's first num is %d ",*se.begin()); printf("it's end num is %d ",*se.end()); se.erase(7);///直接删除元素 printf("7 is deleted,now size = %d ",se.size()); se.erase(se.begin());///通过迭代器删除元素 printf("the first number is deleted,now size = %d,and it's first num is %d ",se.size(),*se.begin()); printf("1 is found %d time ",se.count(1)); printf("999 is found %d time ",se.count(999)); se.clear(); printf("after se.clear(),size=%d ",se.size()); return 0; }
应用题目:(裸题nyoj86)
找球号(一)
时间限制:3000 ms | 内存限制:65535 KB
难度:3
- 描述
- 在某一国度里流行着一种游戏。游戏规则为:在一堆球中,每个球上都有一个整数编号i(0<=i<=100000000),编号可重复,现在说一个随机整数k(0<=k<=100000100),判断编号为k的球是否在这堆球中(存在为"YES",否则为"NO"),先答出者为胜。现在有一个人想玩玩这个游戏,但他又很懒。他希望你能帮助他取得胜利。
- 输入
- 第一行有两个整数m,n(0<=n<=100000,0<=m<=1000000);m表示这堆球里有m个球,n表示这个游戏进行n次。
接下来输入m+n个整数,前m个分别表示这m个球的编号i,后n个分别表示每次游戏中的随机整数k - 输出
- 输出"YES"或"NO"
- 样例输入
-
6 4 23 34 46 768 343 343 2 4 23 343
- 样例输出
- NO
- NO
- YES
- YES
- AC代码:
#include<stdio.h> #include<iostream> #include<algorithm> #include<set> using namespace std; set<int>se; int main() { int n,m,x; scanf("%d%d",&n,&m); while(n--) { scanf("%d",&x); se.insert(x); } while(m--) { scanf("%d",&x); if(se.count(x)) printf("YES "); else printf("NO "); } return 0; }