⼀个学⽣map有学号和成绩两个变量,要求如果成绩不同就按照成绩从⼤到⼩排列,如果成绩相同就按照学号从⼩到⼤排列,用c++冒泡排序实现
时间: 2024-10-18 10:20:27 浏览: 22
为了实现这个需求,你可以创建一个自定义结构体或者类来存储学生的信息,包括学号和成绩。然后,使用一个vector容器来存储这些结构体,并编写一个自定义的比较函数(sort function),在排序过程中同时考虑成绩和学号。以下是使用C++标准库`std::sort`和自定义比较函数的示例:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
// 定义学生结构体
struct Student {
int id;
double score;
};
// 自定义排序规则函数
bool compareStudents(const Student &a, const Student &b) {
if (a.score != b.score) {
return a.score > b.score; // 按照成绩降序排列
} else {
return a.id < b.id; // 成绩相同按学号升序排列
}
}
int main() {
std::vector<Student> students = { {1, 95}, {2, 88}, {3, 95}, {4, 77}, {5, 88} }; // 学生数据
// 使用自定义比较函数对students进行排序
std::sort(students.begin(), students.end(), compareStudents);
// 输出排序后的结果
for (const auto &student : students) {
std::cout << "ID: " << student.id << ", Score: " << student.score << "\n";
}
return 0;
}
```
在这个例子中,`compareStudents`函数充当了`std::sort`的第三个参数,告诉它如何对元素进行比较。如果遇到成绩相同的情况,它会继续检查学号。
阅读全文