例如,我想从输入向量中挑出第k个最大的元素。C++ - 如何将std :: priority_queue中的元素复制到std :: vector
我知道用QuickSelect std :: nth_element可以做得更好。
我的问题是如何复制std :: priority_queue的底层容器std :: vector到另一个vector,而不是解决这个编码问题。
priority_queue<int, vector<int>, greater<int>> pq;
for (int num : nums) {
pq.push(num);
if (pq.size() > k) {
pq.pop();
}
}
我的方式是愚蠢的:
vector<int> res;
while (!pq.empty()) {
res.push_back(pq.top());
pq.pop();
}
有没有更好的方式来做到这一点?
我们可以像
vector<int> res = pq;
的前k元素并不需要订购。
'vector res = pq;'这是用来填充有序值的向量吗? –
不需要订购 –
那么你为什么使用priority_queue? –