Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;STL优先级队列使用?_C++_Data Structures_Stl_Heap_Priority Queue - Fatal编程技术网

C++ C++;STL优先级队列使用?

C++ C++;STL优先级队列使用?,c++,data-structures,stl,heap,priority-queue,C++,Data Structures,Stl,Heap,Priority Queue,具体来说,STL优先级队列容器适配器使用什么堆变量?我正在将它与我自己的手动二进制堆和双桶结构实现进行基准测试,所以我只是想知道。任何有趣的实施知识都可以获得额外积分 您可以选择优先级队列下面的容器。如果未指定,则默认使用std::vector: template< class T, class Container = std::vector<T>, class Compare = std::less<typename Container::val

具体来说,STL优先级队列容器适配器使用什么堆变量?我正在将它与我自己的手动二进制堆和双桶结构实现进行基准测试,所以我只是想知道。任何有趣的实施知识都可以获得额外积分

您可以选择优先级队列下面的容器。如果未指定,则默认使用std::vector:

template<
    class T,
    class Container = std::vector<T>,
    class Compare = std::less<typename Container::value_type>
> class priority_queue;
模板<
T类,
类容器=std::vector,
类比较=std::less
>类优先级队列;
Container—用于存储数据的基础容器的类型 元素。容器必须满足以下要求: 序列容器。此外,它必须提供以下内容 具有常用语义的函数:front()push_back()pop_back()the 标准容器std::vector和std::deque满足这些要求 要求

堆由
*\u heap
函数以简单的方式实现。您可以在此处检查代码:
这个问题是C++的标记(与要求在特定编译器上实现特定细节相反),所以我已经检查了任何信息的标准。在23.6.4的各个章节中,我们了解到,
优先级队列
的行为就像它使用
生成堆
推送堆
弹出堆
。然后这些函数被记录(在
25.4.6节
中)为具有复杂性
最多3*(最后一个)比较。
最多日志(最后一个)比较。
最多2*日志(最后一个)比较。
。因此,某些堆实现可能由这些特征表示,但不会调用特定的堆。

可以使用
std::*\u heap
函数。由于这是特定于实现的,您对哪个特定实现感兴趣?在Visual Studio 2012上,它们用于创建堆。默认情况下,这是一个最大堆。如果您想了解详细信息,只需查看系统上的源代码即可。Implementation=Apple LLVM版本5.1(clang-503.0.40)(基于LLVM 3.4svn)@chris:可能性很大<代码>优先级\u队列
被指定使用这些函数。底层容器的选择与堆的组织方式无关。