#include <cctype> #include <iostream> #include<map> #include<vector> #include<string> #include<algorithm> using namespace std; struct Com { bool operator()(const pair<string,int>&v1,const pair<string,int>&v2) { if(v1.second==v2.second)//当次数相同,按照字典序比较 return v1.first < v2.first;//字典序升序 return v1.second > v2.second;//次数降序比较 } }; int main() { string s; map<string, int> m; getline(cin, s);//存在空格,采用 getline 读取 s[0] = tolower(s[0]);//将首元素从大写变为小写 s[s.size() - 1] = ' ';//去掉句号 int left = 0, right = 0; while (right < s.size() - 1) { while (s[right] != ' ')//right寻找空格 right++; string tem = s.substr(left, right - left);//截取每个单词 m[tem]++; right++; left = right; } vector<pair<string,int>> v(m.begin(),m.end());//使用迭代器区间构造出 vector<pair<string,int>> //vector<pair<string,int>> v = {m.begin(),m.end()}; //等价与上 sort(v.begin(),v.end(),Com());//自定义仿函数 for(size_t i=0;i<v.size();i++) { cout<< v[i].first <<":"<<v[i].second<<endl; } return 0; } // 64 位输出请用 printf("%lld")