【问题标题】:C++ lambda for sort algorithm用于排序算法的 C++ lambda
【发布时间】:2020-10-27 15:21:46
【问题描述】:

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

【问题讨论】:

  • 如果您不是 using namespace std; (you shouldn't be),那么您将缺少大量 std:: 命名空间前缀。另外,你应该声明你的参数const;毕竟你并没有改变它们。

标签: c++ sorting lambda stdmap


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    相关资源
    最近更新 更多