21xrx.com
2025-04-09 07:16:49 Wednesday
文章检索 我的文章 写文章
C++中如何对unordered_map进行排序
2023-07-12 17:01:07 深夜i     30     0
C++ unordered_map 排序

在 C++ 中,unordered_map 是一个非常有用的容器,它提供了非常快速、灵活和高效的映射方式。然而,由于 unordered_map 是基于哈希表的,它并不支持排序操作。但是,如果你需要对 unordered_map 进行排序,你可以使用以下方法:

1. 将 unordered_map 转换为 std::vector

将 unordered_map 进行转换为 std::vector,然后使用 std::sort 对其进行排序。示例代码如下:

#include <unordered_map>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
  unordered_map<int, int> map = {
    3,
    1,
     5,
     3
  };
  vector<pair<int, int>> vec(map.begin(), map.end());
  sort(vec.begin(), vec.end());
  for (auto& p : vec)
    cout << "key: " << p.first << "
  return 0;
}

2. 使用自定义比较函数对 unordered_map 进行排序

自定义比较函数可以按照指定的方式对 unordered_map 进行排序。示例代码如下:

#include <unordered_map>
#include <algorithm>
using namespace std;
// 定义自定义比较函数
bool cmp(const pair<int, int>& a, const pair<int, int>& b)
  return a.second > b.second;
int main() {
  unordered_map<int, int> map = {
     2,
    1,
    2,
     3
  };
  // 将 unordered_map 转换为 std::vector
  vector<pair<int, int>> vec(map.begin(), map.end());
  // 对 vector 使用自定义比较函数进行排序
  sort(vec.begin(), vec.end(), cmp);
  for (auto& p : vec) value: " << p.second << endl;
  
  return 0;
}

以上两种方法都可以实现对 unordered_map 的排序操作,可以根据需要选择其中一种使用。需要注意的是,在进行 unordered_map 转换为 std::vector 的过程中,由于 std::vector 不支持重复元素,所以可能会丢失元素。如果需要保留重复元素,请自行选择合适的方法解决。

  
  

评论区

请求出错了