Есть ли у STL способ применить функцию перед вызовом less than?

#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)));