一开始id, name, grade 全部用string类型表示,发现在输入时用cin会严重影响效率,最后一个case无法通过,将id,grade改为int类型后可以,说明C++的标准输入输出有时效率还是太低,如无必要优先选择scanf, printf。
#include <iostream>
#include <cstdio>
#include <set>
using namespace std;
struct Student{
int id;
string name;
int grade;
Student(int id, string name, int grade) : id(id), name(name), grade(grade){}
};
int n, c;
struct cmp{
bool operator()(const Student& lhs, const Student& rhs) const{
if(c == 1){
return lhs.id < rhs.id;
}else if(c == 2){
return lhs.name < rhs.name
|| (lhs.name == rhs.name && lhs.id < rhs.id);
}else if(c == 3){
return lhs.grade < rhs.grade
|| (lhs.grade == rhs.grade && lhs.id < rhs.id);
}else{
return false;
}
}
};
int main(){
scanf("%d%d", &n, &c);
set<Student, cmp> stus;
for(int i = 0; i < n; ++i){
int id, grade;
string name;
scanf("%d", &id);
cin >> name;
scanf("%d", &grade);
stus.insert(Student(id, name, grade));
}
for(auto& stu : stus){
printf("%06d %s %d\n", stu.id, stu.name.c_str(), stu.grade);
}
return 0;
}