引入
set(集合):是一个内部有序且不含重复元素的容器,set作为一个容器用来储存一组相同类型数据的数据类型,排序方式默认升序,字典序。
定义变量格式:
set<int>a;
set<double>a;
set<struct student> stu;
几个常用的函数:
insert(x)函数:用与插入元素,将x插入set容器中,a.insert(x);
size()函数:用于获得set内部元素的个数,a.size();
clear()函数:用于清空set容器,a.clear();
例题
本题大意:
将一组数从小到大排序并去掉重复的数,输出去重,排序后余下的元素个数并输出处理后的序列
#include <bits/stdc++.h>
using namespace std;
set<int>a;//定义一个set容器a
int main()
{
int n,x;
while(cin>>n)
{
a.clear();//由于本题是多组输入,所以每次用完set容器需要清空
for(int i=1;i<=n;i++)
{
cin>>x;
a.insert(x);//插入元素
}
cout<<a.size()<<endl;//输出去重,排序后余下的元素个数
set<int>::iterator it;//迭代器
for(it=a.begin();it!=a.end();it++)
{
if(it==a.begin())//如果是首元素的话
printf("%d",*it);//*是指针中的解引用操作,用于获取it指向的元素
else
printf(" %d",*it);
}
printf("\n");
}
return 0;
}
本题大意:
求出n个正整数中的第k个最小整数(相同大小的整数只计算一次),
Input
第一行为n和k; 第二行开始为n个正整数的值,整数间用空格隔开。
Output
第k个最小整数的值;若无解,则输出“NO RESULT”。
#include <bits/stdc++.h>
using namespace std;
set<int>a;
int b[10005];
int main()
{
a.clear();//多组,要记得清空容器哦
int n,k,x;
int p=0;
while(cin>>n>>k)
{
for(int i=1;i<=n;i++)
{
cin>>x;
a.insert(x);
}
set<int>::iterator it;//迭代器
for(it=a.begin();it!=a.end();it++)
b[++p]=*it;//将it指向的元素放入数组b中
if(k<=a.size())
{
cout<<b[k]<<endl;
}
else
cout<<"NO RESULT"<<endl;
}
return 0;
}