为什么我们需要在优先级队列声明中添加一个向量作为参数?
Why do we need to add a vector as an argument in priority queue declaration?
每当我想使用优先级队列创建最小堆(默认情况下会创建一个最大堆(时, 我需要传递一个比较器以及要排序的所需类型的向量,如下所示:
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>
,这恰好是默认值,因此您也可以省略容器类型。
相关文章:
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- 为什么一个向量上的多线程操作很慢
- 将一个向量插入另一个向量的某个位置
- 将指向给定子类的指针从一个向量复制到另一个向量
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 将向量之间的数字放在另一个向量之间<vector>>如果两个数字的差值为 1
- 如何在不复制的情况下将一个向量移动到另一个向量中
- 使用 std::transform 将向量向量 (a) 添加到另一个向量向量 (b)
- 如何按另一个向量的方向调整一个向量?
- 将字符向量复制到另一个向量
- 制作一对共享指针并推送一个向量
- 你能把一个向量<int64>投射到一个向量<uint8>吗
- 大家好,当一个类有一个向量作为它的数据成员时,为什么它的大小总是24?
- 为什么我们需要在优先级队列声明中添加一个向量作为参数?
- 如何将所有指针从一个向量移动到另一个向量?
- 将一个向量映射到不同的对,即使向量映射到每对时是不同的?
- 生成一个类Name_class并将两种数据类型存储在一个向量中
- 使用步骤c++构建一个向量
- 如何从另一个向量中的另一个第一元素减去向量中的第一元素
- 将一个向量对放在一个无序映射与一个映射中