奖学金
结构体重载运算符拟定排序规则
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 310
int n;
struct Person
{
int id , sum , a,b,c;
bool operator< (const Person& t) const
{
if(sum != t.sum) return sum > t.sum;
if(a != t.a) return a > t.a;
return id < t.id;
}
}q[N];
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+n+1);
for(int i = 1;i <= 5;i ++)
cout<<q[i].id<<' '<<q[i].sum<<endl;
return 0;
}
用户自定义Rules设置排序规则
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 310
int n;
struct Person
{
int id , sum , a,b,c;
}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+n+1,cmp);
for(int i = 1;i <= 5;i ++)
cout<<q[i].id<<' '<<q[i].sum<<endl;
return 0;
}
在C++得特性中添加了λ表达式写法
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 310
int n;
struct Person
{
int id , sum , a,b,c;
}q[N];
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 + n + 1, [](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;
});
for(int i = 1;i <= 5;i ++)
cout<<q[i].id<<' '<<q[i].sum<<endl;
return 0;
}