c++ - 用于排序算法的 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 原型是什么?
解决方案
对 a 进行排序map
是没有意义的;它已经排序,并且您无法在事后通过对其进行排序来更改排序顺序(除了添加和删除元素外,根本无法更改排序顺序,并且它们始终属于固定顺序)。如果您想以不同的方式对其进行排序,可以:
- 提供备用比较器,
map
以便按照您想要的方式自然排序,或者 - 将条目复制到序列类型(例如
vector
)并对其进行排序。
在这种情况下,您想按值排序,这对于 a 是不可能的map
,因此选项 #2 是您唯一的选择。
推荐阅读
- javascript - 如何将带有分隔符的连接数组拆分为块
- rest - 在 REST API 中处理批量删除
- assembly - 使用 x86 程序集计算 x*log_2(y)
- android-camera - Unity3D:AR 基础 - CameraConfigFilter?
- javascript - 是不是“$(this)”,去掉类?
- python - 如何从 url 列表中抓取图像并将其下载到本地文件夹?
- vue.js - 如何修复此错误:“vnode.context [binding.expression]”?
- android - 发送电子邮件验证中的 NullPointerException,带有 google firebase 的 Android Studio
- sql - 为 H2 创建表的 Spring 启动启动期间的 SQL 错误
- javascript - 响应未定义为 async、await、promise