【发布时间】:2021-09-09 12:34:03
【问题描述】:
C++20 ranges::sort 支持投影,这很好,但我想做更复杂的事情,特别是对投影成员上的函数结果进行排序。
对于函数调用,我尝试了转换然后对该视图进行排序,但 C++20 排序似乎不适用于视图,answer 解释了原因(对于 range-v3)。
换句话说,我可以在不使用 lambda/functor 的情况下编写 this 吗?
struct S{
int val;
};
int origin = 47;
// assume we can not change Distance to take S
int Distance(int val){
return std::abs(val - origin);
}
void my_sort(std::vector<S> ss) {
std::ranges::sort(ss, std::greater<>{}, [](const S& s){
return Distance(s.val);
});
}
【问题讨论】:
-
lambda 有什么问题?你可以创建一个函数来拥有类似
Chained(&S::val, &Distance)... -
另一种方法是在struct中实现
bool operator < (const S& ss) const并使用std::sort -
@Jarod42 没什么特别的,如果不需要的话,我只是不想写 lambda,例如,我真的很喜欢投影,因为它们让我可以做很多以前需要 lambda 的事情。跨度>
-
类似
composefrom boost::hof? -
@Caleth 是的,这在接受的答案中,很好的建议
标签: c++ c++20 std-ranges