#include #include class Reversed { public: bool operator()(string s1, string s2) const { return s1 > s2; } }; class Longest { public: bool operator()(string s1, string s2) const { return s1.length() > s2.length() || s1.length() == s2.length() && s1 < s2; } }; #include template void printmap(const MapType& map, char* label) { cout << endl << "=====< " << label << " >=====" << endl << endl; typename MapType::const_iterator next; for (next = map.begin(); next != map.end(); next++) { cout << (*next).first << ": " << (*next).second << endl; } } int main(void) { map< string, int, less > ordered; map< string, int, Reversed > reversed; map< string, int, Longest > longest; string nextStr; int nextNum; while (cin >> nextStr >> nextNum) { ordered[nextStr] = nextNum; reversed[nextStr] = nextNum; longest[nextStr] = nextNum; } printmap(ordered,"Ordered"); printmap(reversed,"Reversed"); printmap(longest,"Longest"); }