Это выражение:
boost::bind(&std::pair<int, int>::second, _1) <
boost::bind(&std::pair<int, int>::second, _2)
а именно, использование оператора <
фактически определяет функтор между двумя другими функторами, каждый из которых определяется как bind
.
Функтор, ожидаемый для сортировки, должен иметь operator()
, который выглядит следующим образом:
bool operator()(const T& arg1, const T& arg2);
когда вы создаете функтор, используя <
boost, тогда имена владельцев _1
и _2
соответствуют arg1
и arg2
создаваемого функтора.
Вызов bind
создает функтор, который вызывает ::second
из arg1
и arg2
Если повезет, введение лямбда-выражений в C ++ 0x сделает такие выражения устаревшими.