一旦满足指定容量,覆盖优先级队列末尾的元素
Overwrite elements at end of priority queue once specified capacity is met?
我试图在四叉树中搜索最近的N个点,并使用STL优先队列来存储发现的点(按距离查询点排序)。
距离查询点超过最大距离的点永远不会添加到队列中。但是,我也想减少可以通过搜索返回的项目的数量。目前,我将所有比最大距离更接近查询点的点相加,然后只从队列中读取前N个点。
在测试中,这太慢了——简单地添加每个比最大距离更近的点最终会随着添加更多点而变慢。相反,我希望只在以下情况下向队列添加更多的点:当前队列中的点少于N个,或者所讨论的点比队列中的第N个点更接近查询点,在这种情况下,该点被覆盖,并且不增加队列中的元素数量。
是否有一种方法可以用STL优先级队列做到这一点,或者我唯一的选择是写我自己的?
当你迭代它们时,你必须知道当前的N个最佳点吗?如果没有,也许你可以将所有点添加到随机访问容器(例如std::vector
),并在最后调用std::partial_sort
以获得N个最佳值。
如果你真的需要一个优先级队列,std::priority_queue
是不够的。您可以将一些东西与std::algorithm
堆函数放在一起,它允许您访问底层容器。
相关文章:
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 按对象的特定方法按升序排列的C++优先级队列
- 使用2个键的cpp-stl::优先级队列排序不正确
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 打印优先级队列
- 带自定义比较器的最小优先级队列
- 优先级队列自定义比较器
- 排序数组优先级队列
- 更改运行时优先级队列的排序功能
- 优先级队列构造函数的工作
- 实现优先级队列
- 优先级队列功能比较
- 在C++中打印对的优先级队列的所有值时出现问题
- 使用堆的优先级队列,具有相同键的值不遵循 FIFO(先进先出)
- 为什么某些 STL 容器(堆栈、队列、优先级队列)不支持迭代器?
- 是否可以使用简单队列创建优先级队列
- 如何在 c++ 中创建对的优先级队列.这会弹出具有最小值的元素.默认的弹出最大值
- Cython中带有自定义比较器的优先级队列
- 优先级队列比较器[C++].
- asio::io_service 具有多个线程的优先级队列处理