1、用sort函数+运算符重载即可。
#include<cstdio>
#include<string>
#include<algorithm>
#include<iostream>
using namespace std;
struct student{
string name;
string subject[2000];
int ss[2000];
int score;
int num;
bool operator <(const student &obj) const{
return score>obj.score||score==obj.score&&name<obj.name;
}
}a[80];
int main(){
//freopen("a.txt","r",stdin);
int T,n,num,kase=0;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(int i=0;i<n;i++){
int sum=0;
cin>>a[i].name;
cin>>a[i].num;
for(int j=0;j<a[i].num;j++){
cin>>a[i].subject[j]>>a[i].ss[j];
sum+=a[i].ss[j];
}
a[i].score=sum;
}
sort(a,a+n);
printf("Case #%d:\n",++kase);
for(int i=0;i<n;i++){
cout<<a[i].name<<' '<<a[i].num;
for(int j=0;j<a[i].num;j++)
cout<<' '<<a[i].subject[j]<<' '<<a[i].ss[j];
cout<<' '<<a[i].score<<endl;
}
}
return 0;
}