21xrx.com
2024-12-23 00:16:43 Monday
登录
文章检索 我的文章 写文章
如何对 C++ 的 unordered_map 进行排序
2023-07-10 13:46:16 深夜i     --     --
C++ unordered_map 排序

在C++中,我们可以使用unordered_map来存储键值对。然而,在某些情况下,我们需要按照键或值的特定顺序来访问它们。在这种情况下,对unordered_map进行排序是必要的。

排序一个unordered_map的方法有很多种。下面介绍三种不同的方法:

方法1:将unordered_map的键或值存放在另一个容器中,然后对该容器进行排序

我们可以创建一个vector,将unordered_map中所有的键或值存放起来,然后使用std::sort对vector进行排序。这种方法可以使用C++11的auto来使代码更简洁和易读。

举个例子:


#include <iostream>

#include <unordered_map>

#include <vector>

#include <algorithm>

int main() {

  std::unordered_map<int, std::string> map = {4, "b", 3, "a"};

  std::vector<int> keys;

  for (auto&& kv : map) {

    keys.push_back(kv.first);

  }

  std::sort(keys.begin(), keys.end());

  for (auto&& key : keys) {

    std::cout << key << ": " << map[key] << std::endl;

  }

  return 0;

}

这个程序将unordered_map按照键的顺序输出。

方法2:使用C++11的lambda表达式排序unordered_map

C++11中,我们可以使用lambda表达式对unordered_map进行排序。首先,我们需要创建一个可以用于排序的比较函数。这个比较函数接受两个unordered_map的键值对作为参数,并返回一个bool类型的值,用于比较这两个键值对的顺序。然后,我们可以将这个比较函数作为参数传递给std::sort函数,对unordered_map进行排序。

举个例子:


#include <iostream>

#include <string>

#include <unordered_map>

#include <algorithm>

int main() {

  std::unordered_map<std::string, int> map = { 4, "b", "c", 1};

  // 以值为排序标准

  std::sort(map.begin(), map.end(), [](const std::pair<std::string, int>& lhs, const std::pair<std::string, int>& rhs)

    return lhs.second < rhs.second;

  );

  for (auto&& kv : map)

    std::cout << kv.first << ": " << kv.second << std::endl;

  

  return 0;

}

在这个例子中,我们将unordered_map按照值的顺序输出。

方法3:使用STL中的map对unordered_map进行排序

另一个方法是将unordered_map转换为STL中的map容器,然后对其进行排序。map是一个有序容器,可以使我们按照特定顺序进行访问。

举个例子:


#include <iostream>

#include <unordered_map>

#include <map>

int main() {

  std::unordered_map<std::string, int> u_map = {"d", 2, 3, 1};

  std::map<std::string, int> map(u_map.begin(), u_map.end());

  for (auto&& kv : map)

    std::cout << kv.first << ": " << kv.second << std::endl;

  

  return 0;

}

在这个例子中,我们将unordered_map按照键的顺序输出。

总结

在C++中,对unordered_map进行排序有多种方法。我们可以存储键或值的容器进行排序,或者使用lambda表达式或STL中的map容器对unordered_map进行排序。根据具体情况,选择适合的排序方法可以使代码更加简洁和有效。

  
  

评论区

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