缩小std :: priority_queue

时间:2012-08-27 13:33:36

标签: c++ stl priority-queue

给定一个std :: priority_queue,其中元素的添加速度比通过重复弹出最佳元素的常规过程删除的速度快,因此除非完成某些操作,否则程序将耗尽内存,

有没有办法丢弃最差的一半元素,同时保持最好的一半一次一个地处理?

3 个答案:

答案 0 :(得分:3)

显然不是,因为std :: priority_queue的接口非常有限。您可以使用make_heap,push_heap和pop_heap(这是std :: priority_queue的实现方式)实现自己的优先级队列,并实现自己的函数来删除最差的一半元素。

答案 1 :(得分:3)

没有直接的方法。但是二进制堆无论如何都不支持该操作。

但间接这样做并不难:

  • 创建临时空优先级队列
  • 交换主队列和临时队列
  • 输入一个从临时弹出的循环并推送到主
  • 当您对复制元素的数量感到满意时停止
  • 销毁临时队列。

答案 2 :(得分:2)

std::priority_queue是一个2堆,因此只是部分排序。数据结构对于定位最好的一半元素而不是提取它们是没有用的。