poser

导航

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();

 

posted on 2020-08-13 10:01  poser  阅读(498)  评论(0编辑  收藏  举报