C++ 固定大小的优先级队列来存储k近邻

标签 c++ stl priority-queue knn

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

最佳答案

使用std::set怎么样?它按顺序存储元素,如果它增长到超过 k 个元素,您可以删除最大的一个(在恒定时间内)。每次插入都是 O(log k)。

关于C++ 固定大小的优先级队列来存储k近邻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34488108/

相关文章:

c++ - TBB concurrent_vector 与 openmp

c++ - Live555 - 使用 watchVariable 正确关闭客户端

c++ - 我应该为 FIFO 使用哪个 STL 容器?

C++ 如何使用用户定义的比较器将 priority_queue 作为属性正确添加到类中?

c++ - c++:struct和decltype比较器的priority_queue

c++ - C++ 函数定义中的 "Type&"与 "Type*"

c++ - 如何使用 Boost tcp::iostream 指定方案、主机和端口

c++ - std::vector 构造函数——为什么是 int 而不是 int*?

C++ UNICODE 和 STL

c++ - 如何减少 priority_queue<PI, vector<PI> ,greater<PI>> 中特定边的键,试图实现 prim 的算法?