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; } };