C++ 使用最小stl优先级队列理解运算符()重载
我一直在研究优先队列。当我试图创建一个最小stl优先级队列时,我在网上搜索并找到了一些教程。但是我不理解代码中的一些东西。 到目前为止,我有以下代码C++ 使用最小stl优先级队列理解运算符()重载,c++,stl,operator-overloading,priority-queue,C++,Stl,Operator Overloading,Priority Queue,我一直在研究优先队列。当我试图创建一个最小stl优先级队列时,我在网上搜索并找到了一些教程。但是我不理解代码中的一些东西。 到目前为止,我有以下代码 #include<cstdio> #include<iostream> #include<queue> using namespace std; class compare { public: bool operator()(const int &a, const int &b)
#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
class compare
{
public:
bool operator()(const int &a, const int &b)
{
return a>b;
}
};
int main()
{
priority_queue<int, vector<int>, compare > pq;
int i,n;
for(i=1;i<=10;i++)
{
pq.push(i);
}
while(!pq.empty())
{
cout<<pq.top()<<endl;
pq.pop();
}
return 0;
}
#包括
#包括
#包括
使用名称空间std;
班级比较
{
公众:
布尔运算符()
{
返回a>b;
}
};
int main()
{
优先级队列pq;
inti,n;
对于(i=1;i
在操作符函数中有两个参数,但是,当我在队列中推送元素时,只有一个参数,那么这是如何工作和比较的呢
优先级队列使用比较器比较元素,以确定哪个元素具有更高的优先级。推送元素时,比较器将其与队列中已存在的元素进行比较,以确定新元素的位置
在这种情况下,比较器表示值越大的元素优先级越高
pq声明是什么意思?我的意思是为什么有
,它的意思和作用是什么
priority\u queue
是一个容器适配器。它使用容器进行存储,并添加额外的功能—在本例中,按优先级顺序提取。vector
指定它应使用vector
作为其存储;这是默认值,除非您有充分的理由不使用它。push
没有两个参数,只有一个,这就是推送元素时调用的参数。这意味着比较器将优先级队列的顶部元素作为左操作数?@Khairlbasar:可能会这样做。通常,它会在需要比较队列中两个元素的优先级时调用比较器。另一个问题,当它获取一个元素它是否与队列中的所有现有元素进行比较?@Khairubasar不是所有元素。堆插入(通过std::push\u Heap
,由push()
使用)要求为O(log n)
或更好。