#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=