1.什么是priority_queue(优先队列):
优先队列是队列与排序的结合,他有像队列一样的出队与入队操作,but出入队原则与队列不同.
队列是先入队者先出队,而优先队列是优先级高的先出队.那么什么是优先级呢?在定义优先队列时,
会给出这一队列的优先级,优先级有两种情况:第一种是数字大的元素优先级高,第二种是数字小的
元素优先级高,例如我定义了一个数字越大,优先级越高的队列,元素有:5,3,9,8,6,4,0,1,其中虽然5
在队首,但是先出队的元素是9,因为9在所有元素中最大。如果这是一个数字越大,优先级越低的队列,
同理,则0先出队。
2.如何定义priority_queue?
1.priority_queue <数据类型名> 优先队列名;//这种优先队列是数字越大,优先级越高的队列
2.priority_queue<数据类型名,vector<数据类型名>,less<数据类型名> > 优先队列名;
//同第一种一样,数字越大的优先级越大
3.priority_queue<数据类型名,vector<数据类型名>,greater<数据类型名> >
//数字越大的优先级越小
ps.
1.string类型与char类型同样可以作为数据类型名,他们的优先级是按照字典序排列(从第一个字母开始比
若相同则看第二个,以此类推)
2.第2.3种定义时不要忘记要在第三个参数与数据类型名的后括号中间加空格"> >",否则成了位运算的右移运算符
3.priority_queue的常用函数:
1. que.top(); //返回具有最高优先级的元素值(即队首元素)
2. que.pop(); // 删除最高优先级元素
3. que.push(a); //将a入队 (但a不一定存在队尾)//字符串入队要加双引号
//不提供clear&back函数
4.上代码
#include<queue>//必要头文件 #include<iostream> #include<string> using namespace std; string d[2]={"123","0456"}; string f[2]={"abc","ABC"}; int main() { priority_queue<int>a;//数字大的优先级大 priority_queue<string,vector<string>,less<string> > b;//同上,但不要忘记空格 priority_queue<string,vector<string>,less<string> > e;//同上,但不要忘记空格 priority_queue<int,vector<int>,greater<int> >c;//数字越小优先级越大 for(int i=0; i<=100; i++) { a.push(i); c.push(i); } cout<<a.top()<<" "; cout<<c.top()<<" "; for(int i=0;i<2;i++) { b.push(d[i]); e.push(f[i]); } cout<<b.top()<<" "; cout<<e.top()<<" "; e.pop(); cout<<e.top()<<" "; cout<<e.empty()<<" "; //不提供:a.clear(); //不提供:a.back(); return 0; }