c ++一个固定大小的优先级队列,用于存储k个最近邻居

时间:2015-12-28 05:28:14

标签: c++ stl priority-queue knn

我在树数据结构中实现k最近邻搜索。我将结果存储在优先级队列中,该队列将按升序自动对元素进行排序,因此前k个元素就是结果。 STL中的priority_queue容器在这里确实不是一个好选择,因为它只支持一些函数,如push(),pop(),top(),size()empty()等。这里的一个大问题是搜索时整个树,我需要访问很多节点,并且使用push()会使优先级队列越来越长,这将增加以后操作的时间成本。我真正想要的是一个固定长度的优先级队列,所以当push()一个新元素进入队列时,一些具有较大值的元素将被自动删除。我该如何实现呢?或者我可以使用任何标准容器吗?谢谢。

2 个答案:

答案 0 :(得分:2)

使用std::set怎么样?它按顺序存储元素,如果元素增长到k元素以上,则可以删除最大元素(在常量时间内)。每次插入都是O(log k)。

答案 1 :(得分:1)

使用priority_queue但改变排序(升序到降序)的一种方法,如果它增长到k元素之上,则删除顶部元素(更远)。