参考资料:
先回顾队列的定义:队列(queue)维护了一组对象,进入队列的对象被放置在尾部,下一个被取出的元素则取自队列的首部。priority_queue特别之处在于,允许用户为队列中存储的元素设置优先级。这种队列不是直接将新元素放置在队列尾部,而是放在比它优先级低的元素前面。标准库默认使用<操作符来确定对象之间的优先级关系,所以如果要使用自定义对象,需要重载 < 操作符。优先队列有两种,一种是最大优先队列;一种是最小优先队列;每次取自队列的第一个元素分别是优先级最大和优先级最小的元素。1) 优先队列的定义包含头文件:"queue.h", "functional.h"可以使用具有默认优先级的已有数据结构;也可以再定义优先队列的时候传入自定义的优先级比较对象;或者使用自定义对象(数据结构),但是必须重载好< 操作符。 2) 优先队列的常用操作- q.empty() 如果队列为空,则返回true,否则返回false
- q.size() 返回队列中元素的个数
- q.pop() 删除队首元素,但不返回其值
- q.top() 返回具有最高优先级的元素值,但不删除该元素
- q.push(item) 在基于优先级的适当位置插入新元素
#include#include #include #include #include using namespace std;//定义比较结构struct cmp1{ bool operator ()(int &a, int &b) { return a > b; //最小值优先 }};struct cmp2{ bool operator ()(int &a, int &b) { return a < b; //最大值优先 }};//自定义数据结构struct number1{ int x; bool operator < (const number1 &a) const { return x > a.x; //最小值优先 }};struct number2{ int x; bool operator < (const number2 &a) const { return x < a.x; //最大值优先 }};int a[] = {14, 10, 56, 7, 83, 22, 36, 91, 3, 47, 72, 0};number1 num1[] = {14, 10, 56, 7, 83, 22, 36, 91, 3, 47, 72, 0};number2 num2[] = {14, 10, 56, 7, 83, 22, 36, 91, 3, 47, 72, 0};int main(){ priority_queue que;//采用默认优先级构造队列 priority_queue