c++ STL 优先队列

操作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;
}

猜你喜欢

转载自www.cnblogs.com/lixiao189/p/9301007.html