例如,我想从输入向量中挑选出第 k 个最大的元素。
我知道使用 QuickSelect std::nth_element 可以做得更好。
我的问题是如何将 std::priority_queue 的底层容器 std::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 个元素不需要排序。
原文由 Shihao Xu 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以在开头使用
vector<int>
。并将此向量视为堆,使用
std::make_heap
,std::push_heap
,std::pop_heap
。这样,您可以复制向量。