2.整体思路:创建一个map对单词的出现次序进行排序,然后将map中的pair对象提取出来放到一个vector数组里,进行排序,其中sort的第三个元素为仿函数,也就是()的重载,类似于qsort中的比较函数,而比较首先要比较次数,如果次数相同比较字典序(asc码比较),最后尾插并返回字符串的排序
class Solution {
public:
struct newk{
bool operator()(const pair<string ,int>p1,const pair<string,int>p2)
{
return p1.second>p2.second||(p1.second==p2.second&&p1.first<p2.first);
}
};
vector<string> topKFrequent(vector<string>& words, int k) {
map<string,int>countmap;
for(auto &str:words)
{
countmap[str]++;
}
vector<pair<string ,int>>VT(countmap.begin(),countmap.end());
sort(VT.begin(),VT.end(),newk());
vector<string>solution;
for(int x=0;x<k;x++)
{
solution.push_back(VT[x].first);
}
return solution;
}
};