用c++的冒泡排序算法来实现,⼀个学⽣map有学号和成绩两个变量,要求如果成绩不同就按照成绩从⼤到⼩排列,如果成绩相同就按照学号从⼩到⼤排列
时间: 2024-10-17 13:15:52 浏览: 24
MFC.rar_C++mfc学生管理_MFC 学生系统_mfc vc 学生管理_mfc 学生 成绩管理_mfc管理系统
5星 · 资源好评率100%
在C++中,你可以使用`std::multimap`容器来存储学生成绩和学号的数据,因为`multimap`会自动按照键值对的第一个元素(在这里就是成绩)进行排序,并且如果有相同的第一个元素,它会依据第二个元素(学号)进行排序。以下是使用冒泡排序原理来实现这个需求的一个简化版本:
```cpp
#include <iostream>
#include <map>
#include <algorithm>
struct Student {
int id;
double score;
};
bool compareStudents(const std::pair<int, double>& a, const std::pair<int, double>& b) {
if (a.second != b.second) // 如果成绩不同,按成绩排序
return a.second > b.second; // 降序
else // 成绩相同,按学号排序
return a.first < b.first; // 升序
}
void bubbleSortMultimap(std::map<int, double>& studentMap) {
for (auto it = studentMap.begin(); it != studentMap.end(); ++it) {
auto itEnd = studentMap.upper_bound(it->first);
for (auto j = it + 1; j != itEnd; ++j) {
if (compareStudents(*it, *j)) {
std::swap(it->second, j->second); // 交换成绩
std::swap(it->first, j->first); // 交换学号
}
}
if (it == studentMap.begin()) break; // 冒泡结束后跳出外层循环
}
}
int main() {
std::map<int, double> studentData = {{4, 85}, {1, 90}, {3, 85}, {2, 88}};
bubbleSortMultimap(studentData);
for (const auto& entry : studentData) {
std::cout << "学号: " << entry.first << ", 分数: " << entry.second << std::endl;
}
return 0;
}
```
阅读全文