基本操作:
empty() 如果队列为空返回真
pop() 删除对顶元素
push() 加入一个元素
size() 返回优先队列中拥有的元素个数
top() 返回优先队列对顶元素
在默认的优先队列中,优先级高的先出队。在默认的int型中先出队的为较大的数。
使用方法:
头文件:
#include <queue>
声明方式:
1、普通方法:
priority_queue<int>q;
//通过操作,按照元素从大到小的顺序出队
//通过操作,按照元素从大到小的顺序出队
2、自定义优先级:
struct cmp
{
operator bool ()(int x, int y)
{
return x > y; // x小的优先级高
//也可以写成其他方式,如: return p[x] > p[y];表示p[i]小的优先级高
}
};
priority_queue<int, vector<int>, cmp>q;//定义方法
//其中,第二个参数为容器类型。第三个参数为比较函数。
{
operator bool ()(int x, int y)
{
return x > y; // x小的优先级高
//也可以写成其他方式,如: return p[x] > p[y];表示p[i]小的优先级高
}
};
priority_queue<int, vector<int>, cmp>q;//定义方法
//其中,第二个参数为容器类型。第三个参数为比较函数。
3、结构体声明方式:
struct node
{
int x, y;
friend bool operator < (node a, node b)
{
return a.x > b.x; //结构体中,x小的优先级高
}
};
priority_queue<node>q;//定义方法
//在该结构中,y为值, x为优先级。
//通过自定义operator<操作符来比较元素中的优先级。
//在重载”<”时,最好不要重载”>”,可能会发生编译错误
{
int x, y;
friend bool operator < (node a, node b)
{
return a.x > b.x; //结构体中,x小的优先级高
}
};
priority_queue<node>q;//定义方法
//在该结构中,y为值, x为优先级。
//通过自定义operator<操作符来比较元素中的优先级。
//在重载”<”时,最好不要重载”>”,可能会发生编译错误
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstdlib>
#include<ctime>
#include<functional>
using namespace std;
#define M 100005
int n,m;
int v[M];
struct cmp{
bool operator ()(const int &i,const int &j){
return i>j;
}
};
int main()
{
priority_queue<int>que;
priority_queue<int,vector<int>,cmp> que1;
srand((unsigned) (time)(NULL));
for(int i = 1; i <= 20; i++)
{
int key = rand()%100;
que.push(key);
que1.push(key);
}
while(!que.empty() && !que1.empty())
{
int m = que.top();//自定义比较
int mm = que1.top();//从大到小比较
cout<<m<<"\t"<<mm<<endl;
que.pop();
que1.pop();
}
cout<<endl;
return EXIT_SUCCESS;
}
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstdlib>
#include<ctime>
#include<functional>
using namespace std;
#define M 100005
int n,m;
int v[M];
struct cmp{
bool operator ()(const int &i,const int &j){
return i>j;
}
};
int main()
{
priority_queue<int>que;
priority_queue<int,vector<int>,cmp> que1;
srand((unsigned) (time)(NULL));
for(int i = 1; i <= 20; i++)
{
int key = rand()%100;
que.push(key);
que1.push(key);
}
while(!que.empty() && !que1.empty())
{
int m = que.top();//自定义比较
int mm = que1.top();//从大到小比较
cout<<m<<"\t"<<mm<<endl;
que.pop();
que1.pop();
}
cout<<endl;
return EXIT_SUCCESS;
}
HDU 1509 简单的优先队列
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<queue>
#include<stack>
#include<vector>
#include<algorithm>
#include<cstring>
#include<map>
#include<math.h>
#include<functional>
using namespace std;
struct Node{
char msg[30];;
int parameter;
int priority;
int num;
bool operator<(const Node&b)const{
if(priority > b.priority) return 1;
else if(priority == b.priority) return num > b.num;
return 0;
}
};
int main(){
priority_queue<Node>que;
char s[30];
int num = 0;
while(cin>>s)
{
if(strcmp(s,"GET")==0){
if(que.empty()){
cout<<"EMPTY QUEUE!"<<endl;
}
else{
Node temp = que.top();
que.pop();
cout<<temp.msg<<" "<<temp.parameter<<endl;
}
}
else{
Node temp;
cin>>temp.msg>>temp.parameter>>temp.priority;
num++;
temp.num=num;
que.push(temp);
}
}
return(EXIT_SUCCESS);
}
#include<string.h>
#include<iostream>
#include<queue>
#include<stack>
#include<vector>
#include<algorithm>
#include<cstring>
#include<map>
#include<math.h>
#include<functional>
using namespace std;
struct Node{
char msg[30];;
int parameter;
int priority;
int num;
bool operator<(const Node&b)const{
if(priority > b.priority) return 1;
else if(priority == b.priority) return num > b.num;
return 0;
}
};
int main(){
priority_queue<Node>que;
char s[30];
int num = 0;
while(cin>>s)
{
if(strcmp(s,"GET")==0){
if(que.empty()){
cout<<"EMPTY QUEUE!"<<endl;
}
else{
Node temp = que.top();
que.pop();
cout<<temp.msg<<" "<<temp.parameter<<endl;
}
}
else{
Node temp;
cin>>temp.msg>>temp.parameter>>temp.priority;
num++;
temp.num=num;
que.push(temp);
}
}
return(EXIT_SUCCESS);
}