1028. List Sorting (25)

    一开始id, name, grade 全部用string类型表示,发现在输入时用cin会严重影响效率,最后一个case无法通过,将id,grade改为int类型后可以,说明C++的标准输入输出有时效率还是太低,如无必要优先选择scanf, printf。

#include 
#include 
#include 

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 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;
}


你可能感兴趣的:(PAT(Advanced,Level))