为什么我们需要在优先级队列声明中添加一个向量作为参数?

时间:2018-08-13 18:52:34

标签: c++ stl

每当我想使用优先级队列创建最小堆(默认情况下会创建最大堆), 我需要传递一个比较器以及要排序的所需类型的向量,如下所示:

std::priority_queue<int, std::vector<int>, std::greater<int> > pq;

我们为什么要这样做?为什么对于max-heap实现,我们不必如此?

1 个答案:

答案 0 :(得分:6)

由于模板参数是位置参数,并且C ++标准提交人决定在比较器类型之前对容器类型进行排序。

就像使用这样的函数一样:

void foo(int a = 1, int b = 2);

-您不能将其指定为b,但不能指定a

对于最大堆,您使用的是std::less<int>,它恰好是默认值,因此也可以省略容器类型。