1028. List Sorting (25)

    一开始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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值