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

Why do we need to add a vector as an argument in priority queue declaration?

本文关键字:一个 向量 参数 添加 我们 优先级 声明 队列 为什么      更新时间:2023-10-16

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

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

我们为什么要这样做?为什么我们不必对最大堆实现进行相同的操作?

由于模板参数是位置参数,并且C++标准委员会决定在比较器类型之前对包含器类型进行排序。

就像这样的函数一样:

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

- 你不能指定b,但不能a

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