【发布时间】:2018-07-04 18:03:57
【问题描述】:
在C++ Sort 函数中,第三个可选参数是用于对对象进行排序的比较器。如果我们传入 less 作为比较器,我们将按递增顺序获取对象。 (如果比较器被评估为真,则位置不会改变,否则会交换元素!)我的理解是否正确?
按照同样的方式,如果我们将一个 less 比较器传递给优先级队列,我们应该得到一个最小堆,(如果底层数据结构选择为向量,则对象按升序排序。如果我们调用 top( ),会返回vector的第一个元素,也就是最小的数。因此,我认为是min heap) 为什么我们得到一个max heap?
【问题讨论】:
-
你的陈述的第一部分是正确的。但是,要获得最小堆,您需要传递
std::greater否则默认情况下std::less会创建最大堆行为。这在documentation 中有说明 -
请注意,返回 true 会使订单保持不变的假设是无效的。这两项不需要按照它们在原始向量中出现的顺序传递。
-
std::priority_queue默认情况下只是一个最大堆。真的没有更多要解释的了。
标签: c++ comparator priority-queue min-heap max-heap