Я играл с функторами в C ++. В частности, у меня есть вектор пар, который я хотел бы отсортировать по первому элементу пары. Я начал с написания полностью специализированного функтора (то есть что-то вроде "bool MyLessThan (MyPair & lhs, MyPair & rhs)"). Затем, просто потому, что такие вещи интересны, я хотел попробовать написать общий функтор «Применить F к первым элементам этой пары». Я написал ниже, но g ++ это не нравится. Я получаю:
ошибка: несоответствие типа / значения в аргументе 2 в списке параметров шаблона для 'template struct Pair1stFunc2'
ошибка: ожидал тип, получил 'меньше'
#include <algorithm>
#include <functional>
#include <utility>
#include <vector>
template <class P, class F>
struct Pair1stFunc2
{
typename F::result_type operator()(P &lhs, P &rhs) const
{ return F(lhs.first, rhs.first); }
typename F::result_type operator()(const P &lhs, const P &rhs) const
{ return F(lhs.first, rhs.first); }
};
typedef std::pair<int,int> MyPair;
typedef std::vector<MyPair> MyPairList;
MyPairList pairs;
void foo(void)
{
std::sort(pairs.begin(),
pairs.end(),
Pair1stFunc2<MyPair, std::less>());
}
Может кто-нибудь пролить свет на то, что я здесь делаю неправильно? Я знаю, что это немного искусственный пример, но я хотел бы знать, что происходит, хотя бы для улучшения моего STL-фу.