A101365 结构体排序 详细题解
2026-01-22 11:15:51
发布于:北京
14阅读
0回复
0点赞
解题思路及主体代码
- 定义结构体
struct stu{
}a[N];
- 姓名
name:string name; - 年龄
age:int age; - 平均分
avg:double avg
-
结构体排序
- 按照平均分 降序 排序:
if (x.avg!=y.avg){ return x.avg>y.avg; }- 按照年龄 升序 排序:
if (x.age!=y.age){ return x.age<y.age; }- 按照姓名 字典序升序 排序(字符串可以直接进行比较):
if (x.name!=y.name){ return x.name<y.name; }- 若三项关键字都相同,则按照学号进行升序排序:
//需在结构体中加入"int num;",在输入时加入"a[i].num=i;" return x.num<y.num; -
输出
- 平均分保留两位小数进行输出
可使用printf输出:
printf("%.2lf",a[i].avg); string类型使用printf需要注意:
printf("%s",a[i].name.c_str());
完整代码
上面讲的已经很清楚了
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n;
struct stu{
string name;
int age;
double avg;
int num;
}a[N];
bool cmp(stu x,stu y){
if (x.avg!=y.avg){
return x.avg>y.avg;
}
if (x.age!=y.age){
return x.age<y.age;
}
if (x.name!=y.name){
return x.name<y.name;
}
return x.num<y.num;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n;
for (int i=1;i<=n;i++){
cin>>a[i].name>>a[i].age>>a[i].avg;
a[i].num=i;
}
sort(a+1,a+n+1,cmp);
for (int i=1;i<=n;i++){
printf("%s %d %.2lf %d\n",a[i].name.c_str(),a[i].age,a[i].avg,a[i].num);
}
return 0;
}
这里空空如也







有帮助,赞一个