Shrinking a std::priority_queue
Shrinking a std::priority_queue
给定一个std::priority_queue,通过重复弹出最佳元素的通常过程,元素被添加到该队列的速度比删除元素的速度快,因此除非采取措施,否则程序将耗尽内存,
有没有办法扔掉最坏的一半元素,同时让最好的一半像往常一样一次处理一个?
没有直接的方法。但是二进制堆并不能真正支持这种操作。
但间接做到这一点并不难:
- 创建临时的空优先级队列
- 交换主队列和临时队列
- 输入一个从临时弹出并推到主循环的循环
- 当您对复制的元素数量感到满意时停止
- 销毁临时队列
std::priority_queue
是2-heap,因此仅为部分有序。数据结构对于以不同于提取元素的方式定位元素的最佳一半没有用处。
相关文章:
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 将参数打包的参数传递到 std::queue 中,以便稍后使用不同的函数调用
- C++ queue.front();为什么不从第一个元素开始呢?
- 我可以擦除 std::queue 中间的节点吗?
- 获取大小时是否必须锁定 std::queue?
- 为什么我会收到"invalid conversion from 'Queue*/Stack*' to 'int'"错误消息?
- 销毁 std::queue 会导致内存错误
- 如何将一个 std::queue 的内容附加到另一个
- 使用元素加载 std::queue<uint8_t*> 的更有效方法?
- 为什么 std::queue 没有实现 insert() 而 std::d eque 实现了?
- 带有 std::vector 和 std::queue 的 Prim's 算法,我的代码有什么问题?
- C++程序在 #include 时无法编译<stack>,#include<queue>
- 是boost :: lockfree :: Queue(在多线程程序中)可锁定
- std :: queue :: pop()在其std :: unique_ptr数据上操作
- 通过 std::queue 中的元素的值获取元素的索引
- 如何索引指向数组 [queue] 的指针数组
- 像std::queue这样的c++标准库容器是否保证是可重入的
- 如何使用"priority"进行多线程处理?
- 在 boost::lockfree:queue 默认构造函数的情况下断言失败
- C++ Floating-Point van Emde Boas (vEB) Priority Queue