我正在学习使用STL的优先级队列。我在代码中遇到了这个声明。
priority_queue<node*,vector<node*>,compare> minHeap;
此处,node
和compare
的定义如下:
struct node{
char c;
int f;
struct node *left;
struct node *right;
};
class compare{
public:
bool operator()(node *l,node *r)
{
return (*l).f>(*r).f;
}
};
现在,我想知道第一个语句是什么意思? (即priority_queue.....
)
我知道它声明了一个优先级队列,但传递给它的参数究竟是什么意思?
答案 0 :(得分:1)
此处还介绍了使用的模板参数:http://en.cppreference.com/w/cpp/container/priority_queue
第一个模板参数(我提供的链接中名为T
)node*
定义了存储在队列中的数据类型。
第二个模板参数(我提供的链接中名为Container
)定义了用于存储数据类型的容器类。在您包含的示例中,vector
类用于存储类型node*
的元素,因此也是此类型的模板参数。这意味着优先级队列将在内部将元素存储在向量类中,如果您愿意,可以使用任何其他容器类,只要它们符合概念SequenceContainer
中指定的要求,并且实现front
,push_back
和pop_back
方法。
第三个也是最后一个模板参数(我提供的链接中名为Compare
)是用于进行内部比较的函数对象的名称,调用运算符()
,带有对象比较 -