21xrx.com
2024-12-22 22:25:13 Sunday
登录
文章检索 我的文章 写文章
C++ Map 按照 Value 大小排序
2023-07-05 01:27:24 深夜i     --     --
C++ Map Value 排序 大小

C++中的Map是一个非常有用的数据结构,它提供了快速的键值对查找和插入。但是,有时我们需要按照Map中值的大小进行排序。本文将介绍如何通过使用STL库中的函数和自定义比较函数来实现Map按照值大小排序的功能。

首先,我们需要了解C++中的STL库提供了一个sort函数,可以对容器进行排序。使用sort函数前,我们需要定义一个比较函数,以告诉sort如何比较元素大小。比较函数是一个接受两个参数的函数,返回一个bool值,指示第一个参数是否小于第二个参数。根据这样的标准,sort会以升序或降序排列元素。

接下来,我们需要定义一个Map对象,并填充它的键值。


#include <iostream>

#include <map>

#include <algorithm>

#include <vector>

using namespace std;

int main() {

  map<string, int> myMap;

  // 添加键值对

  myMap["apple"] = 50;

  myMap["banana"] = 20;

  myMap["cherry"] = 30;

  myMap["date"] = 70;

  myMap["eggplant"] = 10;

}

接着,我们需要将Map中的键值对存储到vector中,并使用sort函数对vector进行排序。为了按照Map中的值进行排序,我们需要自定义比较函数,使用map的迭代器来比较键值对的值。


  // 定义自定义比较函数

  bool cmp(pair<string,int>& a, pair<string,int>& b)

    return a.second>b.second;

  

  // 将Map中键值对存储在vector中

  vector<pair<string, int>> vec(myMap.begin(), myMap.end());

  // 对vector按值进行排序

  sort(vec.begin(), vec.end(), cmp);

  // 输出排序结果

  for (auto& x: vec)

    cout << x.first << " " << x.second << endl;

  

在上面的代码中,自定义的比较函数cmp接受两个pair类型的参数,并比较它们的second值。当a的second值大于b的second值时,返回true,表示a要排在b的前面。在将Map中的键值对存储到vector中后,我们使用sort函数,传递比较函数cmp作为第三个参数,对vector进行排序。

最后,我们使用auto循环遍历已排序的vector,并输出键和值。运行程序,输出的结果为:


date 70

apple 50

cherry 30

banana 20

eggplant 10

我们可以看到,Map中的值已经按照降序排列。

总的来说,使用sort函数和自定义比较函数可以轻松实现C++ Map按值大小排序的功能。这种方法不仅适用于Map,也适用于其他容器,如set和vector。如果您需要按照不同的标准进行排序,只需要编写不同的比较函数即可。

  
  

评论区

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