C++ 使用最小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)

我一直在研究优先队列。当我试图创建一个最小stl优先级队列时,我在网上搜索并找到了一些教程。但是我不理解代码中的一些东西。 到目前为止,我有以下代码

#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)
或更好。