class Solution {
public:
//求前k大,用小根堆(堆顶元素是最小的)
//优先队列默认生成大根堆;priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int,int>>> pq;生成小根堆
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> mp;
for (auto i : nums){
mp[i]++;
}
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int,int>>> pq;
for (auto [num, count] : mp){
pq.emplace(count, num);
if (pq.size() > k) pq.pop();
}
vector<int> ret;
while (!pq.empty()) {
ret.emplace_back(pq.top().second);
pq.pop();
}
return ret;
}
};