用于排序算法的 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
进行排序是荒谬的;它已经排序了,你不能在事后通过排序来改变排序顺序(除了添加和删除元素之外,这个顺序根本不能改变,而且它们总是属于一个固定的顺序)。如果您想以不同的方式对其进行排序,可以:
- Provide the alternate comparator to
map
所以它自然按照你想要的方式排序,或者
- 将条目复制到序列类型(例如
vector
)并对其进行排序。
在这种情况下,您想按值排序,这对于 map
是不可能的,因此选项 #2 是您唯一的选择。
我想对 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
进行排序是荒谬的;它已经排序了,你不能在事后通过排序来改变排序顺序(除了添加和删除元素之外,这个顺序根本不能改变,而且它们总是属于一个固定的顺序)。如果您想以不同的方式对其进行排序,可以:
- Provide the alternate comparator to
map
所以它自然按照你想要的方式排序,或者 - 将条目复制到序列类型(例如
vector
)并对其进行排序。
在这种情况下,您想按值排序,这对于 map
是不可能的,因此选项 #2 是您唯一的选择。