【发布时间】:2014-10-24 18:43:12
【问题描述】:
我一直想知道为什么 STL 优先级队列默认使用最大堆而不是最小堆。 想到的两个明显用例是寻路(Dijkstra)和构建霍夫曼代码。 两种算法都需要先提取最小元素。 由于排序 (std::sort) 默认使用升序, 我想知道priority_queue背后的设计原因是什么, 因为默认情况下我更喜欢最小堆。
【问题讨论】:
-
因为它本质上是一个优先队列,而不是堆。
-
可能是因为在优先级队列中您希望优先级更高的项目排在第一位,但我同意这不是一个经过深思熟虑的设计(因为它实际上要求每个人都向后实现他们的比较器)。拥有某种优先级对象来实现其比较运算符会更有意义,这样较高优先级值“小于”较低优先级值。
-
@MichaelAaronSafyan:甚至“优先级”也令人困惑,因为人们说“这个任务是优先级 1”之类的话,他们的意思是“先做”而不是“最后做”。外行对优先级的理解是“最高”优先级是最小的数字,其次是“第二”优先级....我同意OP的观点,即在STL中做出的选择似乎很愚蠢,但也许这里没有人真正知道为什么会这样。
标签: c++ stl priority-queue