为什么 std::priority_queue
首先返回最大的元素(即是最大优先级队列),即使它使用 std::less
作为比较类型?
当我想创建一个最小队列时,这让我特别困惑,这将由 std::priority_queue<T, std::vector<T>, std::greater<T>>
完成。 .
优先级队列的作用与 sort()
相反,使事情变得不那么一致。如果你sort()
一个vector
使用greater
比较器,然后front()
vector 的值就是你的最大值。如果您使用 greater
创建优先级队列那么前面就是最小值。我意识到优先级队列使用堆,但我觉得这是有充分理由的。
最佳答案
这样做是为了与历史实现保持一致:许多类,例如 std::map
,以及算法,例如 std::sort
自标准模板库(后来成为 C++ 标准库)开始以来,就使用小于关系来实现排序功能。
在多个类和模板之间保持一致非常重要,因为库用户不需要记住哪个比较是哪个容器或算法的默认比较。
关于c++ - 为什么 std::priority_queue 首先返回最大的元素但使用 std::less ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44750632/