排序,注意当名字/分数相同时按照id小的在前。
快速做一道然后去睡觉
#include <stdio.h>
#include <string>
#include <string.h>
#include <algorithm>
#include <vector>
using namespace std;
struct Node{
int id,grade;
string name;
Node(int i, int g, string str):id(i),grade(g),name(str) {};
};
bool cmp1(Node a,Node b){
return a.id<b.id;
}
bool cmp2(Node a,Node b){
if(a.name==b.name)return a.id<b.id;
return a.name<b.name;
}
bool cmp3(Node a,Node b){
if(a.grade==b.grade)return a.id<b.id;
return a.grade<b.grade;
}
vector<Node> v;
int main() {
int n,c;
scanf("%d%d",&n,&c);
for(int i=0;i<n;i++){
int id,g;
string name;
name.resize(9);
scanf("%d%s%d",&id,&name[0],&g);
v.push_back(Node(id,g,name));
}
switch(c){
case 1:
sort(v.begin(),v.end(),cmp1);
break;
case 2:
sort(v.begin(),v.end(),cmp2);
break;
case 3:
sort(v.begin(),v.end(),cmp3);
break;
}
for(int i=0;i<v.size();i++){
printf("%06d %s %d\n",v[i].id,v[i].name.c_str(),v[i].grade);
}
}
本文介绍了一种使用C++实现的排序算法,通过定义结构体并重载比较运算符,实现了根据id、姓名和分数进行排序的功能。文章详细展示了如何在主函数中读取输入数据,并根据不同的排序条件调用sort函数进行排序。
820

被折叠的 条评论
为什么被折叠?



