用于排序算法的 C++ lambda

C++ lambda for sort algorithm

我想对 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 原型是什么?

map 进行排序是荒谬的;它已经排序了,你不能在事后通过排序来改变排序顺序(除了添加和删除元素之外,这个顺序根本不能改变,而且它们总是属于一个固定的顺序)。如果您想以不同的方式对其进行排序,可以:

  1. Provide the alternate comparator to map 所以它自然按照你想要的方式排序,或者
  2. 将条目复制到序列类型(例如 vector)并对其进行排序。

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