c++用sort函数对类自定义排序

题目描述 

“饱了么”推出了免单活动(免单:即订单金额退还,某一笔订单免单了代表这一笔订单不需要花钱)。

有 n(1≤n≤2000)个顾客点了外卖,第 i个人点外卖的时间为 ai(0≤ai≤23 小时 bi(0≤bi≤59) 分,花了 ci(1≤ci≤5000)元,以上数据均为整数。

花钱最的 m(0≤m≤n)个人可以获得免单。如果有多人花钱一样多,则点单较早的顾客可以优先获得免单资格。

请问,哪些顾客可以被免单呢?

输入描述:

共 n+1 行。

第 1 行共两个数字,分别代表 n 和 m;

第 2 到 n+1 行,每行三个整数 ai,bi,ci;

输出描述:

共输出 m 行,每行 3 个数,分别代表每名获得免单的顾客的下单时间(时、分),以及这个顾客的下单金额。使用空格隔开。

消费金额更高的顾客将会优先输出,如果下单金额相同,则下单时间早的顾客优先输出。(如果无法理解可以先阅读样例和样例解释)。

思路:

本题只要对所有的数据进行排序即可,可将所有数据包装成结构体或一个类,定义一个结构体或者类数组,然后对其排序。排序时按照订单金额降序排列,订单金额相同时按照订单时间升序排列,优先付款的排在前面,然后输出前m个数据;

#include<iostream>
#include<algorithm>
using namespace std;
//存放数据的类
class pp
{
    public:
        int a,b,c;
};
//自定义比较函数
bool cmp(pp p1,pp p2)
{
    if(p1.c!=p2.c)
    {
       if(p1.c>p2.c)
       {
           return true;//p1排在左边
       }
        else
        {
            return false;//p2排在左边
        }
    }
    else if(p1.a!=p2.a)
    {
      if(p1.a<p2.a)
      {
          return true;//p1排在左边
      }
        else
        {
        return false;//p2排在左边  
        }
    }
    else if(p1.b!=p2.b)
    {
        if(p1.b<p2.b)
        {
            return true;//p1排在左边
        }
        else{
            return false;//p2排在左边 
        }
    }
    else
    {
        return true;
    }
}
int main()
{
    int n,m;
    pp p[2010];
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>p[i].a>>p[i].b>>p[i].c;
    }
   sort(p+1,p+n+1,cmp);
    for(int i=1;i<=m;i++)
    {
        cout<<p[i].a<<" "<<p[i].b<<" "<<p[i].c<<endl;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值