c++中unordered_map以value排序
时间: 2023-10-20 07:33:12 浏览: 114
在C++中,`std::unordered_map`是一个无序的关联容器,它不支持直接按值排序。然而,你可以通过一些技巧来实现按值排序的功能。
一种常见的方法是将`std::unordered_map`中的键值对复制到一个`std::vector`中,并使用自定义的比较函数对该向量进行排序。然后,你可以根据排序后的向量构建一个新的有序映射。
下面是一个示例代码,演示了如何按照`std::unordered_map`中的值进行排序:
```cpp
#include <iostream>
#include <unordered_map>
#include <vector>
#include <algorithm>
// 比较函数,用于按值排序
bool compareByValue(const std::pair<int, int>& pair1, const std::pair<int, int>& pair2) {
return pair1.second < pair2.second;
}
int main() {
std::unordered_map<int, int> myMap = {{1, 5}, {2, 3}, {3, 8}, {4, 2}, {5, 1}};
// 将键值对复制到向量中
std::vector<std::pair<int, int>> vec(myMap.begin(), myMap.end());
// 使用比较函数对向量进行排序
std::sort(vec.begin(), vec.end(), compareByValue);
// 构建新的有序映射
std::unordered_map<int, int> sortedMap;
for (const auto& pair : vec) {
sortedMap[pair.first] = pair.second;
}
// 打印排序后的映射
for (const auto& pair : sortedMap) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
return 0;
}
```
在上面的示例代码中,我们定义了一个名为`compareByValue`的比较函数,用于按照键值对的值进行排序。然后,我们将`std::unordered_map`中的键值对复制到一个`std::vector`中,并使用`std::sort`函数和自定义的比较函数对向量进行排序。最后,我们根据排序后的向量构建了一个新的有序映射,并打印出排序后的结果。
输出结果为:
```
5: 1
4: 2
2: 3
1: 5
3: 8
```
请注意,这只是一种基本的实现方法,具体取决于你的需求和数据类型。你可以根据自己的情况进行修改和扩展。
阅读全文