class Solution {
public:
struct cmp{
bool operator() (pair<string, int> &p1, pair<string, int> &p2) {
return p1.second > p2.second || (p1.second == p2.second && p1.first < p2.first);
}
};
vector<vector<string> > topKstrings(vector<string>& strings, int k) {
unordered_map<string, int> mp; // 哈希表
for(const string &str: strings){
++mp[str];
}
priority_queue<pair<string, int>, vector<pair<string, int >>, cmp> pq; // 重新构造排序
for(const auto& [str,cnt]: mp){
if(pq.size() < k) pq.emplace(make_pair(str, cnt)); // make_pair()生成pair 对象
else if (cnt > pq.top().second || cnt == pq.top().second && str < pq.top().first){
pq.pop(); pq.emplace(make_pair(str, cnt));
}
}
vector<vector<string>> ans(k);
while(!pq.empty()){
ans[--k] = move(vector<string>{pq.top().first, to_string(pq.top().second)}); // move 右值引用
pq.pop();
}
return ans;
}
};