为啥 max Heap 初始化语法与 min Heap 通过 priority_queue 不同?

Posted

技术标签:

【中文标题】为啥 max Heap 初始化语法与 min Heap 通过 priority_queue 不同?【英文标题】:Why is maxHeap initialisation syntax different from minHeap through priority_queue?为什么 max Heap 初始化语法与 min Heap 通过 priority_queue 不同? 【发布时间】:2021-05-01 16:12:13 【问题描述】:

我试图使用常规语法创建一个 minHeap,但发现

maxHeap 被初始化为:

priority_queue<int> maxHeap;

而 minHeap 被初始化为:

priority_queue<int, vector<int>, greater<int>> minHeap;

知道为什么在 C++ 中会这样吗?如果 minHeap 和 maxHeap 是使用类似的语法初始化的,那么记忆起来会容易得多。

【问题讨论】:

第 2 和第 3 模板参数有默认值,请参阅:en.cppreference.com/w/cpp/container/priority_queue 因为您不能只提供第 3 个参数(比较),您还必须提供第 2 个(容器类型)。 【参考方案1】:

priority_queue 默认为最大堆,所以 priority_queue&lt;int&gt;priority_queue&lt;int, vector&lt;int&gt;, less&lt;int&gt;&gt; 的简写,确实符合最小堆语法

【讨论】:

以上是关于为啥 max Heap 初始化语法与 min Heap 通过 priority_queue 不同?的主要内容,如果未能解决你的问题,请参考以下文章

max_heap与min_heap

为啥 min() (或 max()) 不能与无单位 0 一起使用?

node 打包内存溢出 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript he

排序算法:heap sort(含heap介绍,python)

Java 8 流的 .min() 和 .max():为啥会编译?

告诉我为啥使用“max,min,sum=arr[0];”这段代码