// 1. 先用map<char, int> 统计每个字符出现的次数 // 2. 创建一个 vector<pair<char, int>> 型数组,并把map表中的数据放到 vector中 // 3. 使用stable_sort 对 vector 的数据进行排序,这需要自定义排序规则 // 4. 遍历vector, 打印输出 #include <map> #include <iostream> #include <string> #include <vector> #include <algorithm> #include <iterator> using namespace std; bool compareFunc(const pair<char,int>& a,const pair<char,int>& b){ return a.second > b.second; } int main(){ string s; map<char,int> mp; while(cin>>s){ //每次循环都要清一下map mp.clear(); for(char c:s){ ++mp[c]; } //用迭代器范围初始化一个vector vector<pair<char,int>> vec(mp.begin(),mp.end()); //因为map已经依照键排序了,所以用稳定排序当次数一样时,会保持原来的先后关系,即ASCII码的升序 stable_sort(vec.begin(),vec.end(),compareFunc); for(auto iter : vec){ cout<<iter->first; } cout<<endl; } }