C ++ STL优先级队列使用什么堆结构?

时间:2014-08-25 16:06:22

标签: c++ data-structures stl heap priority-queue

具体来说,STL优先级队列容器适配器使用哪种堆变体?我正在使用我自己的手动滚动二进制堆和双桶结构实现进行基准测试,所以只是想知道。任何有趣的实施知识的奖励积分!

2 个答案:

答案 0 :(得分:9)

此问题标记为C ++(与要求特定编译器的特定于实现的详细信息相反),因此我已检查标准以获取任何信息。在23.6.4的各个部分中,我们了解到priority_queue只是表现为 - 如果它使用make_heappush_heappop_heap。然后,这些函数被记录(在25.4.6部分中),分别具有复杂性At most 3 * (last - first) comparisons.At most log(last - first) comparisons.At most 2 * log(last - first) comparisons.。因此,某些堆实现可能由这些特性指示,但是没有调用特定的堆。

答案 1 :(得分:-2)

您可以选择priority_queue底层的容器。如果未指定,则默认使用std :: vector:

template<
    class T,
    class Container = std::vector<T>,
    class Compare = std::less<typename Container::value_type>
> class priority_queue;
  

Container - 用于存储的基础容器的类型   元素。容器必须满足要求   SequenceContainer。此外,它必须提供以下内容   具有通常语义的函数:front()push_back()pop_back()   标准容器std :: vector和std :: deque满足这些要求   要求。

堆由*_heap函数以直接的方式实现。你可以在这里检查代码:  http://www.sgi.com/tech/stl/stl_heap.h