С помощью std::ranges::max можно использовать проекцию следующим образом
std::vector v = {
{'a',2,1.0}, {'c',1,3.0}, {'b',4,2.0}, {'d',3,4.0}
};
auto m = std::ranges::max (v, {}, [](auto t) { return std::get(t); } );
Я посмотрел в std какой-нибудь объект функции getitem, который мог бы разрешить запись
auto m = std::ranges::max (v, {}, getitem{} );
но я ничего не нашел. Есть ли такая вещь в std? Я знаю, что есть std::views::elements, но ее нельзя использовать в этом контексте, поскольку для ее ввода требуется диапазон.
OTOH, я мог бы написать это сам с чем-то вроде этого (возможно, заново изобретя колесо)
template
struct getitem {
decltype(auto) operator() (auto&& x) {
return std::get(std::forward(x));
}
};
Подробнее здесь: https://stackoverflow.com/questions/798 ... of-a-tuple