【问题标题】:Why does priority queue (max heap) in C++ use less<T> instead of greater<T>? [duplicate]为什么 C++ 中的优先级队列(最大堆)使用 less<T> 而不是 greater<T>? [复制]
【发布时间】:2016-01-01 00:08:59
【问题描述】:

我很困惑为什么 C++ 中的 priority_queue 使用 less 作为默认比较器并实现最大堆?不是按升序排列元素吗?

【问题讨论】:

    标签: c++ heap priority-queue


    【解决方案1】:

    为了一致性。 less 被用作许多算法和容器的默认比较器,我们人类不必尝试记住默认情况下哪个比较器使用哪个比较器,因为它们都是相同的。

    【讨论】:

    • 所以你的意思是更大的将是一个逻辑默认比较器?
    • 没有。 STL 在其他任何地方都需要比较,它默认为 less。
    • 好吧,不管默认为less,逻辑上不应该更大吗?
    • @Viraj 如果你想要一个最小堆,是的。如果你想要一个最大堆,不。 priority_queue 只是一个队列,不知道你想用它做什么。
    • 对不起,我不明白你的意思。重新表述我的问题,如果较少用作比较器来对向量进行排序,则按升序对其进行排序,为什么在优先级队列中使用它来首先返回最大元素(最大堆)。
    猜你喜欢
    • 2021-01-21
    • 2013-05-06
    • 1970-01-01
    • 2010-10-18
    • 2014-10-18
    • 1970-01-01
    • 2019-04-25
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多