我在树数据结构中实现k最近邻搜索。我将结果存储在优先级队列中,该队列将按升序自动对元素进行排序,因此前k个元素就是结果。 STL中的priority_queue容器在这里确实不是一个好选择,因为它只支持一些函数,如push(),pop(),top(),size()empty()等。这里的一个大问题是搜索时整个树,我需要访问很多节点,并且使用push()会使优先级队列越来越长,这将增加以后操作的时间成本。我真正想要的是一个固定长度的优先级队列,所以当push()一个新元素进入队列时,一些具有较大值的元素将被自动删除。我该如何实现呢?或者我可以使用任何标准容器吗?谢谢。
答案 0 :(得分:2)
使用std::set
怎么样?它按顺序存储元素,如果元素增长到k
元素以上,则可以删除最大元素(在常量时间内)。每次插入都是O(log k)。
答案 1 :(得分:1)
使用priority_queue
但改变排序(升序到降序)的一种方法,如果它增长到k
元素之上,则删除顶部元素(更远)。