如何在c ++中将3个元素放入priority_queue

编码菜鸟

在此处输入图像描述

我一直在研究 Leetcode 中的 C++ 中的 priority_queue,我从解决方案中找到了这段代码,我知道这是最小堆,但不明白这是如何将 3 个元素存储到 minHeap 的。

  1. vector<int>得到matrix[r][0]vector<vector<int>>得到rgreater<>得到0????
  2. 为什么我们需要放priority_queue<int,vector<int>,greater<int>> minHeap一个vector<int>来做最小堆?
内森·皮尔森

首先,我们来看看类中模板参数的含义minHeap

cppreference

template<
    class T,
    class Container = std::vector<T>,
    class Compare = std::less<typename Container::value_type>
class priority_queue;

模板参数

T - 存储元素的类型。...

Container - 用于存储元素的底层容器的类型。...

比较- 提供严格弱排序的比较类型。

因此,对于minHeap,它包含vector<int>对象。它使用 avector<vector<int>>作为底层存储来包含这些vector<int>对象。它用于greater<>比较两个vector<int>对象以确定它们的顺序。


有什么greater<>意义?Compare参数用于决定哪个元素在顶部。默认情况下,priority_queue使用less<>,这意味着较大的元素位于顶部。相反,它会翻转比较的greater<>方向,因此较小的元素会出现在顶部。这就是使它成为“最小”堆的原因。


现在,查看对push的调用:

void push( const value_type& value );
void push( value_type&& value ); (since C++11)

push只接受一个参数,并且参数的类型是value_type,在这种情况下是vector<int>.

所以这条线

minHeap.push({matrix[r][0], r, 0});

实际上是添加一个vector<int>minHeap. vector<int>其中包含的值为matrix[r][0]r0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Swift中将Array的第一个和最后一个元素放入

如何预分配(保留)priority_queue <vector>?

如何获取priority_queue的比较类型?

如何在C ++类中的STL priority_queue中实现此比较

c ++为什么std :: multimap比std :: priority_queue慢

C ++接口队列或priority_queue作为类的模板参数

如何在类实例的非静态比较方法中使用priority_queue?

如何在C#中将所有数组元素设置为一个变量

如何在laravel中将关系“ table1”或“ table2”或“ table3”放入一个表中?

如何在C中将数组元素移动n个位置

删除priority_queue minheap中的元素

c ++:struct和decltype比较器的priority_queue

函数和函数在priority_queue和某种C ++

是否可以在C ++中将容器的大小用作priority_queue的优先级?

如何在任何类中创建比较器函数,就像我们在C ++ STL中创建priority_queue一样

C ++中STL的priority_queue

如何在C ++中初始化类的priority_queue?

从C ++ priority_queue弹出元素的时间

关于C ++ priority_queue vector <int>在priority_queue <int,vector <int>,更大的<int>> pq中做什么?

如何在C#中将XML放入字典中

您如何在C ++中的priority_queue中对对象排序?

如何在C中将位数组的元素传递给函数

如何在运行时指定比较器类的priority_queue

从 C++ priority_queue 解除分配

我应该如何更正这个 priority_queue 比较函数?

如何在C++中将元素添加到数组的最后一个

STL C++中Priority_queue的向量

如何在python/pandas中将元素放入多个类别?

std::priority_queue 如何完成 O(log n) 插入?