#include <algorithm>
#include <functional>
#include <iostream>
#include <vector>

class A
{
	int m_;
	
public:
	A(int m) : m_(m) {}
	
	int f() const { return m_; }
};


int main() {
	std::vector<A> vec{1, 2, 5, 3, 4};
	using namespace std::placeholders;
	A& max = *std::max_element(begin(vec), end(vec)
		, std::bind(
			&std::less<int>::operator()
			, std::less<int>()
			, std::bind(&A::f, _1)
			, std::bind(&A::f, _2)
		)
	);
	std::cout << max.f() << '\n';
}