#include <algorithm> #include <cctype> #include <cstddef> #include <iostream> #include <map> #include <string> #include <utility> #include <vector> using namespace std; string lower(string s) { for (size_t i = 0; i < s.size(); i++) { s[i] = tolower(s[i]); } return s; } //使用静态函数的方法比较pair大小 static bool cmp(pair<string, int> p1, pair<string, int> p2) { if (p1.second == p2.second) { return p1.first < p2.first; } return p1.second > p2.second; } // bool cmp(pair<string, int> p1, pair<string, int> p2) { // if (p1.second == p2.second) { // return p1.first < p2.first; // }//这种方法会报错 // return p1.second > p2.second; // } void sortmap(map<string, int> m, vector<pair<string, int>>& vec) { //map为非线性容器,只能将map中的pair加入到vector中排序,并用vector输出 map<string, int>::iterator it = m.begin(); while (it!=m.end()) { vec.push_back(pair<string,int>(it->first,it->second));it++; } sort(vec.begin(), vec.end(),cmp); } int main() { string s; map<string, int> m; while (cin >> s) { s = lower(s); if (s.find('.') != string::npos) { s.erase(s.find('.')); m[s]++; break; } m[s]++; } vector<pair<string, int>> ves; sortmap(m, ves); vector<pair<string, int>>::iterator it=ves.begin(); for (; it != ves.end(); it++) { cout << it->first << ":" << it->second << endl; } } // 64 位输出请用 printf("%lld")