【发布时间】:2014-06-29 02:18:12
【问题描述】:
我经常发现自己将std::sort、std::max_element 等与简单调用成员函数的 lambda 结合使用
std::vector<MyType> vec;
// populate...
auto m = std::max_element(std::begin(vec), std::end(vec),
[](const MyType& a, const MyType& b) { return a.val() < b.val()})
这感觉像是在浪费字符和清晰度。我知道我可以编写另一个函数/可调用函数并将函数指针/可调用对象传递给这些算法函数,但我经常需要在程序中只进行一次排序,这对我来说并不好解决问题的方法。理想情况下,我想做的是:
auto m = std::max_element(std::begin(vec), std::end(vec), &MyType::val);
并让对象按它们的val()s 排序。我忽略的标准库的某些部分是否可以帮助我解决这个问题?或另一种简单的方法?我想让排序或搜索的内容尽可能明显。
我知道仅&MyType::val 是不够的,我正在寻找可以包装它的东西,或者提供类似的功能而不会模糊其含义。
【问题讨论】:
标签: c++ algorithm c++11 pointer-to-member