21xrx.com
2024-12-27 05:25:06 Friday
登录
文章检索 我的文章 写文章
如何在C++中使用map根据value进行排序
2023-06-24 00:07:15 深夜i     --     --
C++ map 排序 value

在C++中,map是一种非常有用的数据结构。它允许你存储一组键值对,并且可以根据键或值来进行查找和排序。在本文中,我们将讨论如何在C++中使用map根据value进行排序。

首先,我们需要定义一个map对象,并存储数据。假设我们有以下键值对:


std::map<std::string, int> my_map;

my_map["John"] = 50;

my_map["Jack"] = 80;

my_map["Mary"] = 70;

现在我们要根据value进行排序,需要定义一个比较函数。我们可以使用lambda表达式来定义这个函数。lambda表达式是一种匿名函数,可以在需要的地方定义和使用。


auto compare = [](const std::pair<std::string, int>& a, const std::pair<std::string, int>& b)

  return a.second < b.second;

;

这个函数将比较两个键值对的value,并返回比较结果。现在我们可以使用std::sort算法来对map进行排序。


std::vector<std::pair<std::string, int>> vec(my_map.begin(), my_map.end());

std::sort(vec.begin(), vec.end(), compare);

我们将map中的键值对存储到一个vector中,并使用std::sort算法进行排序。排序后的结果也将存储在vector中。现在我们可以遍历vector,并输出结果。


for (auto& p : vec)

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

这将输出已排序的键值对。完整代码如下所示:


#include <iostream>

#include <map>

#include <vector>

#include <algorithm>

int main() {

  std::map<std::string, int> my_map;

  my_map["John"] = 50;

  my_map["Jack"] = 80;

  my_map["Mary"] = 70;

  auto compare = [](const std::pair<std::string, int>& a, const std::pair<std::string, int>& b)

    return a.second < b.second;

  ;

  std::vector<std::pair<std::string, int>> vec(my_map.begin(), my_map.end());

  std::sort(vec.begin(), vec.end(), compare);

  for (auto& p : vec)

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

  

  

  return 0;

}

这将输出以下结果:


John 50

Mary 70

Jack 80

这说明,我们已经成功地使用map根据value进行排序。这个技巧可以在很多情况下派上用场,并且可以按照我们需要的方式来定义比较函数。

  
  

评论区

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