每当我想使用优先级队列创建最小堆(默认情况下会创建最大堆), 我需要传递一个比较器以及要排序的所需类型的向量,如下所示:
std::priority_queue<int, std::vector<int>, std::greater<int> > pq;
我们为什么要这样做?为什么对于max-heap实现,我们不必如此?
答案 0 :(得分:6)
由于模板参数是位置参数,并且C ++标准提交人决定在比较器类型之前对容器类型进行排序。
就像使用这样的函数一样:
void foo(int a = 1, int b = 2);
-您不能将其指定为b
,但不能指定a
。
对于最大堆,您使用的是std::less<int>
,它恰好是默认值,因此也可以省略容器类型。