C++的优先队列
C++的优先队列定义在头文件“queue”中,命名空间是“std”。声明如下:
std::priority_queue<int> priQue;
缺省状态下,priority_queue的头部元素是最大的(这和java中的优先队列刚好相反)。
注意,C++中的priority_queue实际上是一个适配器,我们可以通过第二个参数指定该适配器使用何种容器实现:
priority_queue<int, vector<int>> priQue;
我们可以通过第三个参数指定比较方式。缺省的比较函数是std::less<T>。如果我们希望priority_queue的头部元素是最小的,可以将比较函数指定为std::greater<T>:
priority_queue<int, vector<int>, greater<int>> priQue;
或者,我们可以自己定义比较函数,最简便的方式就是通过lambda表达式定义比较函数:
auto fun = [](const int& a, const int& b)-> bool {return b < a;}; priority_queue<int, vector<int>, decltype(fun)> priQue(fun);
怎样向priority_queue中添加元素?
priQue.push(1);
怎样访问priority_queue的头部元素?
priQue.top();
注意,priQue.top()仅仅是访问头部元素,但是不会将头部元素从priority_queue中移除。如果想将头部元素从priority_queue中移除,那么要调用
priQue.pop();