21xrx.com
2024-05-20 14:06:21 Monday
登录
文章检索 我的文章 写文章
C++中如何对unordered_map进行排序
2023-07-12 17:01:07 深夜i     --     --
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 不支持重复元素,所以可能会丢失元素。如果需要保留重复元素,请自行选择合适的方法解决。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复