#include <iostream>
#include <vector>
#include <algorithm>
struct Student {
int id;
int chinese_score;
int math_score;
// 用于排序的比较函数
bool operator<(const Student& other) const {
if (chinese_score + math_score != other.chinese_score + other.math_score) {
// 先按总分排序
return chinese_score + math_score > other.chinese_score + other.math_score;
} else {
// 总分相同时,按学号排序
return id < other.id;
}
}
};
int main() {
std::vector<Student> students;
int id, chinese, math;
// 读取输入直到文件结束
while (std::cin >> id >> chinese >> math) {
students.push_back({id, chinese, math});
}
// 对学生记录进行排序
std::sort(students.begin(), students.end());
// 去除重复的学生记录
auto unique_end = std::unique(students.begin(), students.end(),
[](const Student& a, const Student& b) {
return a.id == b.id && a.chinese_score == b.chinese_score && a.math_score == b.math_score;
}
);
// 调整vector的大小以移除重复项
students.erase(unique_end, students.end());
// 输出排序和去重后的学生记录
for (const auto& student : students) {
std::cout << student.id << " " << student.chinese_score << " " << student.math_score << std::endl;
}
return 0;
}
在上面的代码中,我们定义了一个Student结构体来存储每个学生的信息,包括学号、语文成绩和数学成绩。结构体还重载了<运算符,用于定义排序规则。我们读取输入,将每个学生的信息存储在一个vector中,然后使用std::sort进行排序。排序完成后,我们使用std::unique去除重复的学生记录,并输出最终的结果。
请注意,为了简化代码,我们假设输入总是有效的,并且没有错误处理。在实际应用中,你可能需要添加额外的错误检查和处理逻辑。