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

Kar*_*ngh 2 c++ stl

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

std::priority_queue<int, std::vector<int>, std::greater<int> > pq;
Run Code Online (Sandbox Code Playgroud)

我们为什么要做这个?为什么我们不需要同样的最大堆实现?

Log*_*uff 6

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

就像这样的函数:

void foo(int a = 1, int b = 2);
Run Code Online (Sandbox Code Playgroud)

- 你不能称之为指定b,但不是a.

对于max-heap,您正在使用std::less<int>,这恰好是默认值,因此您也可以省略容器类型.