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


using namespace std;
using namespace std::placeholders;


struct MyType
{
	int _val;
	MyType(int a) : _val(a){}
	int val() const { return _val; }
};


int main()
{
	vector<MyType> vec{ 1, 2, 4, 5 };

	auto m = std::max_element(vec.begin(), vec.end(), 
                              bind(less<int>(), bind(&MyType::val, _1), bind(&MyType::val, _2)));

	std::cout << m->val() << endl;

	return 0;
}