⼀个学⽣map有学号和成绩两个变量,要求如果成绩不同就按照成绩从⼤到⼩排列,如果成绩相同就按照学号从⼩到⼤排列,用c++实现
时间: 2024-10-17 08:15:00 浏览: 19
基于Java和JSP的学生成绩管理系统设计源码
在C++中,你可以使用`std::map`的数据结构结合自定义比较函数(也称为`Comparator`)来实现这个需求。由于C++标准库里的`map`默认按键值对的第一个元素排序,我们需要创建一个比较函数模板`compare`,作为`map`的第二模板参数。这里是一个简单的示例:
```cpp
#include <iostream>
#include <map>
#include <functional> // 包含function用于自定义比较函数
// 自定义比较函数模板
template<typename T1, typename T2>
bool compare(const std::pair<T1, T2>& a, const std::pair<T1, T2>& b) {
if (a.second != b.second) { // 如果成绩不同
return a.second > b.second; // 按照成绩从大到小
} else { // 成绩相同则按学号从小到大
return a.first < b.first;
}
}
int main() {
std::map<int, int, decltype(compare<int, int>)> studentMap; // 使用自定义比较函数
// 假设已经有了学生的成绩和学号数据,添加到map中
studentMap[1] = 90; // 学号1, 成绩90
studentMap[2] = 85; // 学号2, 成绩85
studentMap[3] = 90; // 学号3, 成绩90
// 现在map已经按照我们的规则排序
for (const auto& pair : studentMap) {
std::cout << "学号: " << pair.first << ", 成绩: " << pair.second << std::endl;
}
return 0;
}
```
阅读全文