排序函数和优先级队列中的比较器C ++

时间:2018-07-04 18:03:57

标签: c++ comparator priority-queue min-heap max-heap

在C ++排序功能中,第三个可选参数是用于对对象进行排序的比较器。如果我们少传入比较器,则对象将按升序排列。 (如果比较器的评估结果为true,则位置将不会更改,否则将交换元素!)我的理解正确吗?

按照相同的方式,如果将较少的比较器传递给优先级队列,则应该获得最小堆(如果将基础数据结构选择为向量,则对象将按升序排序。如果调用top( ),向量的第一个元素将被返回,这是最小的数目。因此,我认为这是一个最小堆)为什么要得到一个最大堆?

1 个答案:

答案 0 :(得分:0)

根据this online documentation,C ++库类verbose: :debug首先返回 largest 元素,这意味着比较器会在较大元素之前对较小元素进行排序。从上面的链接:

  

请注意,定义Compare参数以使其返回true   如果它的第一个参数在弱点中在第二个参数之前   订购。但是因为优先级队列输出最大的元素   首先,实际上是“先于”的元素最后输出。那   是,根据该队列的前面包含“ last”元素   比较所施加的弱排序。

因此std::priority_queue会产生一个最大堆并优先处理较大的元素。