#include <functional>
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
map<int, string, greater<int>> foo(greater<int>{});
//map<int, string> foo(greater<int>()); Doesn't work
map<int, string, function<bool(const int&, const int&)>> bar([](const int& lhs, const int& rhs){ return lhs > rhs; });
//map<int, string> bar([](const int& lhs, const int& rhs){ return lhs > rhs; }); Doesn't work
foo[1] = "one"s;
foo[2] = "two"s;
bar[3] = "three"s;
bar[4] = "four"s;
for(auto& i : foo) {
cout << i.first << ':' << i.second << endl;
}
for(auto& i : bar) {
cout << i.first << ':' << i.second << endl;
}
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHN0cmluZz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCW1hcDxpbnQsIHN0cmluZywgZ3JlYXRlcjxpbnQ+PiBmb28oZ3JlYXRlcjxpbnQ+e30pOwoJLy9tYXA8aW50LCBzdHJpbmc+IGZvbyhncmVhdGVyPGludD4oKSk7IERvZXNuJ3Qgd29yawoJbWFwPGludCwgc3RyaW5nLCBmdW5jdGlvbjxib29sKGNvbnN0IGludCYsIGNvbnN0IGludCYpPj4gYmFyKFtdKGNvbnN0IGludCYgbGhzLCBjb25zdCBpbnQmIHJocyl7IHJldHVybiBsaHMgPiByaHM7IH0pOwoJLy9tYXA8aW50LCBzdHJpbmc+IGJhcihbXShjb25zdCBpbnQmIGxocywgY29uc3QgaW50JiByaHMpeyByZXR1cm4gbGhzID4gcmhzOyB9KTsgRG9lc24ndCB3b3JrCgkKCWZvb1sxXSA9ICJvbmUiczsKCWZvb1syXSA9ICJ0d28iczsKCWJhclszXSA9ICJ0aHJlZSJzOwoJYmFyWzRdID0gImZvdXIiczsKCQoJZm9yKGF1dG8mIGkgOiBmb28pIHsKCQljb3V0IDw8IGkuZmlyc3QgPDwgJzonIDw8IGkuc2Vjb25kIDw8IGVuZGw7Cgl9CgkKCWZvcihhdXRvJiBpIDogYmFyKSB7CgkJY291dCA8PCBpLmZpcnN0IDw8ICc6JyA8PCBpLnNlY29uZCA8PCBlbmRsOwoJfQp9