用于排序算法的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原型?

map进行排序是无意义的;它已经排序了,你不能在事后通过排序来改变排序顺序(除了添加和删除元素之外,根本不能改变排序顺序,它们总是属于固定的顺序(。如果你想用不同的方式排序,可以选择:

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

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

最新更新