set/C++

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;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值