#c
#c
Вопрос:
Многие алгоритмы принимают объект сравнения. Часто я заканчиваю тем, что получаю что-то вроде
std::sort(begin, end, [amp;](auto constamp; lhs, auto constamp; rhs) {
return Function(lhs) < Function(rhs);
});
Есть ли что-нибудь в STL, чтобы применить функцию перед вызовом less than? Чтобы я мог писать:
std::sort(begin, end, std::DoesThisExist(Function));
Я знаю, что мог бы написать свой собственный, но мне интересно, существует ли это уже. Я просмотрел cpprefence, но не увидел его. Легко мог бы это пропустить.
Комментарии:
1. Я не думаю, что это существует, однако написать это должно быть очень легко.
2. std::bind , подробности см. Ниже
Ответ №1:
Диапазоны TS (которые были объединены для C 20) определяют вариации многих стандартных алгоритмов, которые включают проекции именно с таким поведением.
Ответ №2:
В принципе, вы могли бы использовать std::bind , но он очень подробный:
typedef std::remove_reference<decltype(*begin)>::type T;
std::sort(begin, end, std::bind(std::less<T>(),
std::bind(Function,std::placeholders::_1),
std::bind(Function,std::placeholders::_2)));