在 C++ Sort 函数中,第三个可选参数是用于对对象进行排序的比较器。如果我们传入 less 作为比较器,我们将按递增顺序获取对象。(如果比较器被评估为真,则位置不会改变,否则元素将被交换!)我的理解是否正确?
按照同样的方式,如果我们将一个 less 比较器传递给优先级队列,我们应该得到一个最小堆,(如果底层数据结构选择为向量,则对象按升序排序。如果我们调用 top(),则会返回vector的第一个元素,也就是最小的数。所以,我认为是最小堆)为什么我们得到最大堆?
在 C++ Sort 函数中,第三个可选参数是用于对对象进行排序的比较器。如果我们传入 less 作为比较器,我们将按递增顺序获取对象。(如果比较器被评估为真,则位置不会改变,否则元素将被交换!)我的理解是否正确?
按照同样的方式,如果我们将一个 less 比较器传递给优先级队列,我们应该得到一个最小堆,(如果底层数据结构选择为向量,则对象按升序排序。如果我们调用 top(),则会返回vector的第一个元素,也就是最小的数。所以,我认为是最小堆)为什么我们得到最大堆?
根据此在线文档,C++ 库类首先std::priority_queue
返回最大元素,因为比较器将较小的元素排在较大的元素之前。从上面的链接:
请注意,Compare 参数被定义为如果它的第一个参数在弱排序中位于其第二个参数之前,则它返回 true。但是因为优先级队列首先输出最大的元素,所以“先来”的元素实际上是最后输出的。也就是说,根据比较强加的弱排序,队列的前面包含“最后一个”元素。
因此std::priority_queue<T,std::less<T>>
创建一个最大堆并优先考虑较大的元素。