#include <functional>
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
map<int, string, greater<int>> foo;
//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+PiBmb287CgkvL21hcDxpbnQsIHN0cmluZz4gZm9vKGdyZWF0ZXI8aW50PigpKTsgRG9lc24ndCB3b3JrCgltYXA8aW50LCBzdHJpbmcsIGZ1bmN0aW9uPGJvb2woY29uc3QgaW50JiwgY29uc3QgaW50Jik+PiBiYXIoW10oY29uc3QgaW50JiBsaHMsIGNvbnN0IGludCYgcmhzKXsgcmV0dXJuIGxocyA+IHJoczsgfSk7CgkvL21hcDxpbnQsIHN0cmluZz4gYmFyKFtdKGNvbnN0IGludCYgbGhzLCBjb25zdCBpbnQmIHJocyl7IHJldHVybiBsaHMgPiByaHM7IH0pOyBEb2Vzbid0IHdvcmsKCQoJZm9vWzFdID0gIm9uZSJzOwoJZm9vWzJdID0gInR3byJzOwoJYmFyWzNdID0gInRocmVlInM7CgliYXJbNF0gPSAiZm91ciJzOwoJCglmb3IoYXV0byYgaSA6IGZvbykgewoJCWNvdXQgPDwgaS5maXJzdCA8PCAnOicgPDwgaS5zZWNvbmQgPDwgZW5kbDsKCX0KCQoJZm9yKGF1dG8mIGkgOiBiYXIpIHsKCQljb3V0IDw8IGkuZmlyc3QgPDwgJzonIDw8IGkuc2Vjb25kIDw8IGVuZGw7Cgl9Cn0=