convert "bbccaaddddddde" to "ddddddaabbcce", convert string by frequency and letter order. use functor
class Comp {
public:
bool operator() (const pair<char, int> &p1, const pair<char, int> &p2) { // cannot forget const
if(p1.second > p2.second)
return true;
else if(p1.second == p2.second)
return p1.first < p2.first;
else
return false;
}
}; // cannot forget “;"
string convert2(const string& s) { // cannot forget const
if(s.empty()) return "";
unordered_map<char, int> mp;
vector<pair<char, int>> vp;
for(char c : s) mp[c]++;
for(auto p : mp) vp.push_back(p);
//sort(vp.begin(), vp.end(), Comp());
sort(vp.begin(), vp.end(), [](const pair<char, int> &p1, const pair<char, int> &p2) {
if(p1.second > p2.second)
return true;
else if(p1.second == p2.second)
return p1.first < p2.first;
else
return false;
});
string res;
for(auto p : vp) {
for(int i=0; i<p.second; ++i) res += p.first;
}
return res;
}