#include <tr1/unordered_map>
#include <boost/bind.hpp>
#include <boost/lambda/lambda.hpp>
#include <iostream>
#include <algorithm>
struct A {int x; int y; };
int main()
{
typedef std::tr1::unordered_map<int, A> map_t;
map_t m;
A a1 = {1, 100};
m[1] = a1;
A a2 = {10, 101};
m[2] = a2;
A a3 = {-1, 42};
m[1000] = a3;
A max_a = max_element(m.begin(), m.end(),
bind(&A::x, bind(&map_t::value_type::second, _1))
< bind(&A::x, bind(&map_t::value_type::second, _2))
)->second;
std::cout << "The max A::x was found in {" << max_a.x << ", " << max_a.y << "}\n";
}
I2luY2x1ZGUgPHRyMS91bm9yZGVyZWRfbWFwPgojaW5jbHVkZSA8Ym9vc3QvYmluZC5ocHA+CiNpbmNsdWRlIDxib29zdC9sYW1iZGEvbGFtYmRhLmhwcD4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgpzdHJ1Y3QgQSB7aW50IHg7IGludCB5OyB9OwppbnQgbWFpbigpCnsKICAgIHR5cGVkZWYgc3RkOjp0cjE6OnVub3JkZXJlZF9tYXA8aW50LCBBPiBtYXBfdDsKICAgIG1hcF90IG07CiAgICBBIGExID0gezEsIDEwMH07IAogICAgbVsxXSA9IGExOwogICAgQSBhMiA9IHsxMCwgMTAxfTsKICAgIG1bMl0gPSBhMjsKICAgIEEgYTMgPSB7LTEsIDQyfTsKICAgIG1bMTAwMF0gPSBhMzsKCiAgICBBIG1heF9hID0gbWF4X2VsZW1lbnQobS5iZWdpbigpLCBtLmVuZCgpLAogICAgICAgICAgICAgICAgICAgIGJpbmQoJkE6OngsIGJpbmQoJm1hcF90Ojp2YWx1ZV90eXBlOjpzZWNvbmQsIF8xKSkKICAgICAgICAgICAgICAgICAgPCBiaW5kKCZBOjp4LCBiaW5kKCZtYXBfdDo6dmFsdWVfdHlwZTo6c2Vjb25kLCBfMikpCiAgICAgICAgICAgICApLT5zZWNvbmQ7CiAgICAgICAgICAgICAKICAgICBzdGQ6OmNvdXQgPDwgIlRoZSBtYXggQTo6eCB3YXMgZm91bmQgaW4geyIgPDwgbWF4X2EueCA8PCAiLCAiIDw8IG1heF9hLnkgPDwgIn1cbiI7CiAgICAKfQo=