c++自带优先队列用法(据说比手打慢):
定义:priority_queue<
数据类型,
容器类型, 比较方式>
(写在定义数组的位置)
//升序队列(这里要有空格,不然成了右移运算符↓)
priority_queue <int,vector<int>,greater<int> > q;
//降序队列(这里要空格,不然成了右移运算符↓)
priority_queue <int,vector<int>,less<int> >q;
priority_queue <int> q
不写容器类型、比较方式的话默认是大根堆。
要用头文件<queue> ,记得开命名空间。
至于为什么greater是小根堆,less是大根堆,似乎可以这样理解:
我们手打堆的时候,是不是有个从堆顶往下移的操作?就是说如果堆顶>儿子就往下移(小根堆),所以greater就是表示那个大于号……
用法:
q.empty() 如果队列为空,则返回true,否则返回false
q.size() 返回队列中元素的个数
q.pop() 删除队首元素,但不返回其值
q.top() 返回具有最高优先级的元素值,但不删除该元素
q.push(x) 在基于优先级的适当位置插入新元素x