C - 如何将元素从 std::priority_queue 复制到 std::vector

新手上路,请多包涵

例如,我想从输入向量中挑选出第 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 许可协议

阅读 1.1k
1 个回答

您可以在开头使用 vector<int>

并将此向量视为堆,使用 std::make_heapstd::push_heapstd::pop_heap

这样,您可以复制向量。

原文由 Shihao Xu 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题