给定一个std :: priority_queue,其中元素的添加速度比通过重复弹出最佳元素的常规过程删除的速度快,因此除非完成某些操作,否则程序将耗尽内存,
有没有办法丢弃最差的一半元素,同时保持最好的一半一次一个地处理?
答案 0 :(得分:3)
显然不是,因为std :: priority_queue的接口非常有限。您可以使用make_heap,push_heap和pop_heap(这是std :: priority_queue的实现方式)实现自己的优先级队列,并实现自己的函数来删除最差的一半元素。
答案 1 :(得分:3)
没有直接的方法。但是二进制堆无论如何都不支持该操作。
但间接这样做并不难:
答案 2 :(得分:2)
std::priority_queue
是一个2堆,因此只是部分排序。数据结构对于定位最好的一半元素而不是提取它们是没有用的。