一旦满足指定的容量,覆盖优先级队列末尾的元素?

时间:2013-03-29 20:13:35

标签: c++ stl priority-queue nearest-neighbor

我正在尝试搜索四叉树中最近的N个点,并使用STL优先级队列存储找到的点(按查询点的距离排序)。

超出查询点最大距离的点永远不会添加到队列中。但是,我也希望切断搜索可以返回的项目数。目前,我添加的所有点都比查询点更接近最大距离,然后只读取队列中的前N个点。

在测试中,这太慢了 - 只需添加比最大距离更近的每个点,随着更多点的增加而减慢。我想改为只向队列中添加更多的点:队列中当前少于N个点,或者有问题的点比队列中的第N个点更接近查询点,在这种情况下该点被覆盖,并且不会增加队列中元素的数量。

有没有办法用STL优先级队列执行此操作,还是我自己编写自己的唯一选项?

1 个答案:

答案 0 :(得分:0)

在迭代它们时,您是否必须知道当前的N个最佳点?如果没有,也许您可​​以将所有点添加到随机访问容器(例如std::vector),并在末尾调用std::partial_sort以获得N最佳。

如果您真的需要使用优先级队列,std::priority_queue是不够的。您可以将std::algorithm堆函数放在一起,这样您就可以访问底层容器了。