首页 > 解决方案 > 用于排序算法的 C++ lambda

问题描述

我想对map<pair<string, int>, int>dbg 进行排序;使用 lambda 按值:

为此我有

void test()
{
   map<pair<string, int>, int> dbg;
   sort( dbg.begin(), dbg.end(),
         []( pair<pair<string, int>, int>& lht, pair<pair<string, int>, int>& rht) {
      return lht.second > rht.second;
   });
}

但是编译失败并出现很多错误。这里正确的 lamda 原型是什么?

标签: c++sortinglambdastdmap

解决方案


对 a 进行排序map是没有意义的;它已经排序,并且您无法在事后通过对其进行排序来更改排序顺序(除了添加和删除元素外,根本无法更改排序顺序,并且它们始终属于固定顺序)。如果您想以不同的方式对其进行排序,可以:

  1. 提供备用比较器,map以便按照您想要的方式自然排序,或者
  2. 将条目复制到序列类型(例如vector)并对其进行排序。

在这种情况下,您想按值排序,这对于 a 是不可能的map,因此选项 #2 是您唯一的选择。


推荐阅读