set/C++
题目描述:
李华从高中来到了大学,高中老师说的到大学就轻松了,他也相信了,他到大学发现老师说的有点道理,不过要想学到更多的知识,都要靠自学。他在学习一段时间后休息的时候看到了一串数字,但这些数字比较乱,所以他就想把这些数字按照自己的思路经行排序,排序规则如下:假设有n个整数,其中3<=n<=10000;删除第2个元素,然后对除第一个元素和最后一个元素外的元素进行去重和按从大到小的顺序排列。
输入:
第一行输入一个整数n
第二行输入n个整数
输出:
第一行剩余元素的个数
第二行按规则顺序输出元素(两个数之间有一个空格,末尾无空格)
样例输入:
8
8 2 3 4 5 6 7 1
样例输出:
7
8 7 6 5 4 3 1
代码:
#include <iostream>
#include <set>
using namespace std;
struct MyComp
{
bool operator()(const int &a,const int &b)
{
if(a!=b)
return a>b;
else
return a>b;
}
};
int main()
{
set<int,MyComp> s;
int First,End,n,x;
cin>>n;
cin>>First>>x;
for(int i=2;i<n-1;i++)
{
cin>>x;
s.insert(x);
}
cin>>End;
cout<<s.size()+2<<endl;
cout<<First;
set<int,MyComp>::iterator it;
for(it=s.begin();it!=s.end();it++)
cout<<" "<<*it;
cout<<" "<<End<<endl;
return 0;
}
总结:
1.去重和排序:set
2.在定义集合的时候,如果没有指定比较函数,那么采用默认的比较函数,即按键值由小到大的顺序插入元素。
struct MyComp //自定义非结构体函数
{
bool operator () (const int &a,const int &b)//自定义排序函数()是重载符
{
if(a!=b)
return a>b; //从大到小
else
return a>b;
}
};