21xrx.com
2024-09-19 10:00:17 Thursday
登录
文章检索 我的文章 写文章
C++ Map 值排序
2023-07-07 06:59:29 深夜i     --     --
C++ Map 值排序 STL 算法

C++ Map是一种常用的数据结构,它可以快速地存储和访问键值对。然而,在实际应用中,我们经常需要对Map中的值进行排序以便进一步分析数据。本文将介绍如何使用C++ Map对值进行排序。

首先,我们需要了解C++ Map中的排序方式。Map按键进行排序,而不是按值进行排序。因此,要按值进行排序,我们需要先将Map中的键值对切换为值键对,然后再按值进行排序。以下是实现该方法的示例代码:


#include <iostream>

#include <map>

#include <algorithm>

using namespace std;

//比较函数,按值从大到小排序

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

  return a.second > b.second;

int main() {

  //定义Map

  map<int, int> myMap;

  myMap[1] = 5;

  myMap[2] = 3;

  myMap[3] = 7;

  myMap[4] = 1;

  //将Map中的键值对转换为值键对

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

  //对值进行排序

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

  //输出排序结果

  for (auto it : vec)

    cout << it.first << ":" << it.second << endl;

  

  return 0;

}

上述代码将Map中的键值对转换为值键对(vector > vec(myMap.begin(), myMap.end())),然后使用sort函数按照值进行排序(sort(vec.begin(), vec.end(), cmp))。比较函数cmp按照值从大到小进行排序。最后,输出排序结果。

除了使用自定义比较函数,我们还可以使用Lambda表达式完成Map中值的排序。以下是使用Lambda表达式完成排序的示例代码:


#include <iostream>

#include <map>

#include <algorithm>

using namespace std;

int main() {

  //定义Map

  map<int, int> myMap;

  myMap[1] = 5;

  myMap[2] = 3;

  myMap[3] = 7;

  myMap[4] = 1;

  //将Map中的值键对存入vector

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

  //Lambda表达式按照值从大到小排序

  sort(vec.begin(), vec.end(), [](pair<int, int> a, pair<int, int> b) return a.second > b.second; );

  //输出排序结果

  for (auto it : vec)

    cout << it.first << ":" << it.second << endl;

  

  return 0;

}

相比使用自定义比较函数,使用Lambda表达式可以更加简洁明了。Lambda表达式在sort函数中直接定义,可以避免创建额外的函数。

总之,使用C++ Map对值进行排序是非常有用的,在实际应用中可以提高数据处理效率。我们可以使用自定义比较函数或Lambda表达式完成排序。以上是本文介绍的两种方法,希望对读者有所帮助。

  
  

评论区

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