奖学金(多关键字排序)
学生有学号、总分、语文、数学、英语,总分高的排名高,总分相同时语文成绩高的排名高,总分和语文相同,学号小的排名高。求出前五名
思路:
1.重载小于号
2.写一个比较函数cmp
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 310;
int n;
struct Person
{
int id, sum, a, b, c;
bool operator < (const Person& p) const
{
if(sum != p.sum) return sum > p.sum;
if(a != p.a) return a > p.a;
return id < p.id;
}
}q[N];
bool cmp(Person& a, Person &b)
{
if(a.sum != b.sum) return a.sum > b.sum;
if(a.a != b.a) return a.a > b.a;
return a.id < b.id;
}
int main()
{
cin >> n;
for(int i = 1; i <= n; i++)
{
int a, b, c;
cin >> a >> b >> c;
q[i] = {i, a+b+c, a, b, c};
}
//sort(q + 1, q + 1 + n);
sort(q + 1, q + 1 + n, cmp);
for(int i = 1; i <=5; i++)
{
cout << q[i].id << ' ' << q[i].sum << endl;
}
return 0;
}