在C ++中自由实现“有界优先级队列”

时间:2011-03-16 17:33:36

标签: c++ stl priority-queue

我正在寻找C ++中有界优先级队列抽象的自由软件实现。基本上,我需要一个行为与std::priority_queue类似的数据结构,但最多只能保存“最佳” n 元素。

示例:

std::vector<int> items; // many many input items
bounded_priority_queue<int> smallest_items(5);
for(vector<int>::const_iterator it=items.begin(); it!=items.end(); it++) {
  smallest_items.push(*it);
}
// now smallest_items holds the 5 smallest integers from the input vector

有谁知道这种事情的良好实施?有经验吗?

2 个答案:

答案 0 :(得分:1)

我认为this thread中讨论的算法可能正是您所寻求的。如果你想要先行一步,你可能需要考虑建立Boost的实现d_ary_heap_indirect,它是Boost.Graph的一部分(在d_ary_heap.hpp中)。如果你做得很好,可以将它提交给Boost。它可以做一个很好的小补充,因为这样的实现肯定有很多用途。

答案 1 :(得分:0)

为什么不将std :: vector与functor / comparison函数和std :: sort()一起使用到正确的顺序? 代码可能非常简单