c++map排序
时间: 2025-04-26 07:04:59 浏览: 35
### C++ 中 `std::map` 排序
#### 使用自定义比较函数创建已排序的 `std::map`
`std::map` 默认按照键的升序排列。可以通过提供自定义比较函数,在初始化时改变这种默认行为。
```cpp
#include <iostream>
#include <map>
bool compare(int a, int b) {
return a > b;
}
int main() {
std::map<int, char, bool(*)(int, int)> customMap(compare);
customMap[1] = 'e';
customMap[2] = 'd';
customMap[3] = 'c';
customMap[4] = 'b';
customMap[5] = 'a';
for (auto& pair : customMap) {
std::cout << pair.first << ": " << pair.second << '\n';
}
return 0;
}
```
此代码展示了如何通过传递给 `std::map` 构造函数的一个指针指向布尔类型的二元谓词来反转整数键的顺序[^1]。
#### 对基于现有 `std::map` 创建的新容器进行排序
由于 `std::map` 是一种关联式容器,内部已经根据键进行了排序,因此通常不需要对其进行额外排序。但是,如果希望以不同方式查看数据或者对值而不是键进行排序,则可以考虑将元素复制到另一个支持随机访问迭代器的数据结构中再做处理。
对于这种情况,下面的例子说明了怎样把 `std::map` 转换成 `std::vector<pair<KeyType, ValueType>>` 并对其按值降序排序:
```cpp
#include <algorithm> // sort()
#include <iostream>
#include <map>
#include <utility> // make_pair(), pair<>
#include <vector>
// 自定义比较函数对象用于按第二个成员(即value)降序排序
struct value_compare {
inline bool operator()(const std::pair<char,int>& lhs,
const std::pair<char,int>& rhs)
{
return lhs.second > rhs.second;
}
};
int main(){
std::map<char, int> original_map{{'a', 5}, {'b', 7}, {'c', 3}};
// 将 map 复制到 vector 中
std::vector<std::pair<char, int>> vec(original_map.begin(), original_map.end());
// 按照值降序排序
std::sort(vec.begin(), vec.end(), value_compare());
// 输出结果
for(auto &p : vec){
std::cout<< p.first <<": "<< p.second<<"\n";
}
return 0;
}
```
上述程序先构建了一个简单的字符-整型映射表,接着将其转换成向量形式以便能够应用标准库算法中的 `sort()` 函数,并最终实现了依据数值大小而非关键字来进行排序的效果[^2].
阅读全文
相关推荐

















