对一个结构体或类的数组进行排序

根据人的属性对人进行排序,之后输出结果。将每个人看成一个对象,这个对象有ACM、金钱、人品三个属性,排序优先顺序是ACM、金钱、人品。因此ACM成绩相同时比较金钱,如果金钱再相同时比较人品值。

首先我们先定义一个men对象:

struct men
{
     int  ACM;
     int  Money;
     int  RP;
};


men对象一共有三个成员。

比较函数:

bool cmp(men a, men b)
{
    if(a.ACM != b.ACM)
    {
       return a.ACM < b.ACM;
    }else  if(a.ACM == b.ACM )
    {
        if(a.ACM == b.ACM && a.Money == b.Money)
        {
            return a.RP < b.RP;
        }
        return  a.Money < b.Money;
    }
}


 

当ACM值不等时返回a.ACM > b.ACM,如果ACM相等时返回a.Money > b.Money,如果ACM和Money值都相等则返回a.RP > b.RP。这样就实现了对一个有多个成员的结构体类型进行比较,但是比较结构体类型时一定要写比较函数。在进行完排序之后就可以对排完序的结构体数组进行输出了。cmp函数的形参类型一定要对应要排序的数据类型才可以。对应各种应用sort进行排序的程序,比较函数大体都是这样一个形式。
 完整代码:

#include <algorithm>
#include <vector>
using namespace std;
struct men
{
     int  ACM;
     int  Money;
     int  RP;
};
bool cmp(men a, men b)
{
    if(a.ACM != b.ACM)
    {
       return a.ACM < b.ACM;
    }else  if(a.ACM == b.ACM )
    {
        if(a.ACM == b.ACM && a.Money == b.Money)
        {
            return a.RP < b.RP;
        }
        return  a.Money < b.Money;
    }
}
int main()
{
        men a;
        men b;
        men c;
        a.ACM = 1;
        a.Money = 2;
        a.RP = 4;

        b.ACM = 1;
        b.Money = 2;
        b.RP = 3;

        c.ACM = 1;
        c.Money = 2;
        c.RP = 5;

        vector<men> vec;
        vec.push_back(a);
        vec.push_back(b);
        vec.push_back(c);
        sort(vec.begin(), vec.end(), cmp);
        for(vector<men>::iterator itr = vec.begin(); itr != vec.end(); ++itr)
        {
            cout << (*itr).ACM << " " ;
            cout << (*itr).Money << " ";
            cout << (*itr).RP << endl;
        }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值