每当我想使用优先级队列创建最小堆(默认情况下会创建一个最大堆)时,我都需要传递一个比较器以及要排序的所需类型的向量,如下所示:
std::priority_queue<int, std::vector<int>, std::greater<int> > pq;
我们为什么要做这个?为什么对于max-heap实现,我们不必如此?
由于模板参数的位置和C ++标准提交人决定在比较器类型之前对容器类型进行排序。
就像这样的函数:
void foo(int a = 1, int b = 2);
-您不能将其称为指定b
,但不能指定a
。
对于max-heap,您正在使用std::less<int>
,它恰好是默认值,因此也可以省略容器类型。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句