操作1:
新建一个优先队列:
ps:该操作需要包含头文件queue
priority_queue < int , vector<int> , greeter <int> > t1;
priority_queue < int , vector<int> , less <int> > t2;
解释:
接下来对解释一下新建时的三个参数:
其中第一个参数为优先队列的数据类型,可以是int,double之类的
其中第二个参数是指用什么容器来储存这个优先队列,我们一般用vector。
其中第三个参数是指优先队列根是最大值还是最小值,其中greeter
操作二:
插入一个元素:
t1.push(元素);
t2.push(元素);
操作三:
查看顶部的元素。
我们用优先队列自带的top()函数来输出顶部元素。
比如说这样:
printf ("%d\n", t1.top());
printf ("%d\n", t2.top());
操作四:
弹出顶部元素:
t1.pop();
t2.pop();
操作五: (copy 来的)
如果想自定义优先级并且数据类型不是基本数据类型,而是复杂数据类型,则必须重载其中的operator( )
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
typedef struct
{
int a;
int b;
}Node;
// 自定义优先级
struct cmp
{
bool operator()(const Node &t1,const Node &t2)
{
return t1.b<t2.b; // 相当于less,数据元素值大的优先级高
}
};
int main()
{
int i,n;
scanf("%d",&n);
Node *num=new Node[n];
for(i=0;i<n;i++)
{
scanf("%d%d",&num[i].a,&num[i].b);
}
priority_queue<Node,vector<Node>,cmp> q(num,num+n);
while(!q.empty())
{
printf("%d ",q.top().b);
q.pop();
}
printf("\n");
return 0;
}
操作五(copy 来的):
优先队列还可以将一个普通数组中的元素转化为优先队列的初始值!
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
int main()
{
int a[6]={3,2,1,4,6,5};
priority_queue < int , vector <int> , less <int> > q (a,a+6);
while(!q.empty())
{
printf("%d ",q.top());
q.pop();
}
printf("\n");
return 0;
}
原文地址:https://www.cnblogs.com/lixiao189/p/9301007.html
时间: 2024-10-27 16:14:38