Я часто использую std::sort
, std::max_element
и т.д. с помощью лямбды, которая просто вызывает функцию-член
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()})
это кажется пустой тратой персонажей и потерей ясности. Я знаю, что я мог бы написать другую функцию /callable и передать объект-указатель/вызываемый объект этим функциям алгоритма, но мне часто нужно делать этот вид - только один раз в программе, и это не ударит меня как хорошего способ решения проблемы. Что я хочу делать, в идеале говорят:
auto m = std::max_element(std::begin(vec), std::end(vec), &MyType::val);
и отсортировать объекты по их val()
s. Есть ли какая-то часть stdlib, которую я пропускаю, что могло бы помочь мне в этом? или другой простой способ сделать это? Я хотел бы сделать, что это сортировка или поиск, насколько это возможно.
Я знаю, что просто &MyType::val
недостаточно, я ищу что-то, что может его обернуть, или предоставить аналогичную функциональность, не обманывая смысл.