#include <iostream>
#include <vector>
#include <algorithm>
template<typename Iter, typename Function>
Iter argmax(Iter begin, Iter end, Function f)
{
typedef typename std::iterator_traits<Iter>::value_type T;
return std::max_element(begin, end, [&f](const T& a, const T& b){
return f(a) < f(b);
});
}
int main() {
std::vector<int> l({1, 43, 10, 17});
auto a = argmax(l.begin(), l.end(), [](int x) { return -1 * abs(42 - x); });
std::cout << *a << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdGVtcGxhdGU8dHlwZW5hbWUgSXRlciwgdHlwZW5hbWUgRnVuY3Rpb24+Ckl0ZXIgYXJnbWF4KEl0ZXIgYmVnaW4sIEl0ZXIgZW5kLCBGdW5jdGlvbiBmKQp7CiAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXI+Ojp2YWx1ZV90eXBlIFQ7CiAgICByZXR1cm4gc3RkOjptYXhfZWxlbWVudChiZWdpbiwgZW5kLCBbJmZdKGNvbnN0IFQmIGEsIGNvbnN0IFQmIGIpewogICAgICAgIHJldHVybiBmKGEpIDwgZihiKTsKICAgIH0pOwp9CgppbnQgbWFpbigpIHsKICAgIHN0ZDo6dmVjdG9yPGludD4gbCh7MSwgNDMsIDEwLCAxN30pOwogICAgYXV0byBhID0gYXJnbWF4KGwuYmVnaW4oKSwgbC5lbmQoKSwgW10oaW50IHgpIHsgcmV0dXJuIC0xICogYWJzKDQyIC0geCk7IH0pOwogICAgc3RkOjpjb3V0IDw8ICphIDw8IHN0ZDo6ZW5kbDsKfQ==