#include <algorithm>
#include <functional>
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
const auto cmp = [ordering = { "dog", "cat", "mouse", "elephant" }](const string& lhs, const string& rhs) { return find(cbegin(ordering), cend(ordering), lhs) < find(cbegin(ordering), cend(ordering), rhs); };
map<string, int, function<bool(const string&, const string&)>> myMap(cmp);
myMap["cat"s] = 1;
myMap["dog"s] = 2;
myMap["elephant"s] = 3;
myMap["mouse"s] = 4;
myMap["rhino"s] = 5;
for (auto& i : myMap) {
cout << i.first << ' ' << i.second << endl;
}
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHN0cmluZz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCWNvbnN0IGF1dG8gY21wID0gW29yZGVyaW5nID0geyAiZG9nIiwgImNhdCIsICJtb3VzZSIsICJlbGVwaGFudCIgfV0oY29uc3Qgc3RyaW5nJiBsaHMsIGNvbnN0IHN0cmluZyYgcmhzKSB7IHJldHVybiBmaW5kKGNiZWdpbihvcmRlcmluZyksIGNlbmQob3JkZXJpbmcpLCBsaHMpIDwgZmluZChjYmVnaW4ob3JkZXJpbmcpLCBjZW5kKG9yZGVyaW5nKSwgcmhzKTsgfTsKCgltYXA8c3RyaW5nLCBpbnQsIGZ1bmN0aW9uPGJvb2woY29uc3Qgc3RyaW5nJiwgY29uc3Qgc3RyaW5nJik+PiBteU1hcChjbXApOwoKCW15TWFwWyJjYXQic10gPSAxOwoJbXlNYXBbImRvZyJzXSA9IDI7CglteU1hcFsiZWxlcGhhbnQic10gPSAzOwoJbXlNYXBbIm1vdXNlInNdID0gNDsKCW15TWFwWyJyaGlubyJzXSA9IDU7CgoJZm9yIChhdXRvJiBpIDogbXlNYXApIHsKCQljb3V0IDw8IGkuZmlyc3QgPDwgJyAnIDw8IGkuc2Vjb25kIDw8IGVuZGw7Cgl9Cn0=