首先,#include<queue>,#include<vector>
一、对于基本类型:
然后,如果是要大的数优先级高,那么这样声明:priority_queue<int, vector<int>, less<int> > PQ;
如果是要小的数优先级高,那么这样: priority_queue<int, vector<int>, greater<int> > PQ;
其中的vector用list好像会出错,具体原因再去了解
插入用push(1);
取出用top();
弹出用pop();
二、对于结构:
方法一:如果不是基本类型,那么要重载括号运算符,声明还是一样的 priority_queue<Node, vector<Node>, greater<Node> > PQ;
在Node结构里面添加如下函数:
bool operator < (const Node& other) const {
return this->elem < other.elem;
}//没有这个函数,less<Node>则会报错
bool operator > (const Node& other) const {
return this->elem > other.elem;
}//没有这个函数,greater<Node>则会报错
方法二:不用less<Node>和greater<Node>的形式,而是自己来定义,声明的时候这样写: priority_queue<Node, vector<Node>, cmp > PQ;
在外面重新写一个结构,如下:
struct cmp{
bool operator() (const Node& node1, const Node& node2){
return node1.elem < node2.elem;
}
} ;
由此我猜想,STL里面的less<TYPE>和greater<TYPE>应该是重载括号运算符