#include <iostream>
#include <string>
#include <map>
struct Foo {
Foo(std::string s) : foo_value(s) {}
std::string foo_value;
};
int main() {
auto comp = [](const Foo& f1, const Foo& f2) { return f1.foo_value < f2.foo_value; };
std::map<Foo, int, decltype(comp)> m({ {Foo("b"), 2}, {Foo("a"), 1} }, comp);
for (auto const &kv : m)
std::cout << kv.first.foo_value << ": " << kv.second << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8bWFwPgoKc3RydWN0IEZvbyB7CiAgICBGb28oc3RkOjpzdHJpbmcgcykgOiBmb29fdmFsdWUocykge30KICAgIHN0ZDo6c3RyaW5nIGZvb192YWx1ZTsKfTsKCmludCBtYWluKCkgewogICAgYXV0byBjb21wID0gW10oY29uc3QgRm9vJiBmMSwgY29uc3QgRm9vJiBmMikgeyByZXR1cm4gZjEuZm9vX3ZhbHVlIDwgZjIuZm9vX3ZhbHVlOyB9OwogICAgc3RkOjptYXA8Rm9vLCBpbnQsIGRlY2x0eXBlKGNvbXApPiBtKHsge0ZvbygiYiIpLCAyfSwge0ZvbygiYSIpLCAxfSB9LCBjb21wKTsKCiAgICBmb3IgKGF1dG8gY29uc3QgJmt2IDogbSkKICAgICAgICBzdGQ6OmNvdXQgPDwga3YuZmlyc3QuZm9vX3ZhbHVlIDw8ICI6ICIgPDwga3Yuc2Vjb25kIDw8IHN0ZDo6ZW5kbDsKCiAgICByZXR1cm4gMDsKfQ==