在C ++排序功能中,第三个可选参数是用于对对象进行排序的比较器。如果我们少传入比较器,则对象将按升序排列。 (如果比较器的评估结果为true,则位置将不会更改,否则将交换元素!)我的理解正确吗?
按照相同的方式,如果将较少的比较器传递给优先级队列,则应该获得最小堆(如果将基础数据结构选择为向量,则对象将按升序排序。如果调用top( ),向量的第一个元素将被返回,这是最小的数目。因此,我认为这是一个最小堆)为什么要得到一个最大堆?
答案 0 :(得分:0)
根据this online documentation,C ++库类verbose: :debug
首先返回 largest 元素,这意味着比较器会在较大元素之前对较小元素进行排序。从上面的链接:
请注意,定义Compare参数以使其返回true 如果它的第一个参数在弱点中在第二个参数之前 订购。但是因为优先级队列输出最大的元素 首先,实际上是“先于”的元素最后输出。那 是,根据该队列的前面包含“ last”元素 比较所施加的弱排序。
因此std::priority_queue
会产生一个最大堆并优先处理较大的元素。