队列学习

我一直很不擅长队列什么的,联赛靠近,必须恶补一下。
首先,使用优先队列必须引用

#include<queue>

定义的时候,有两种。
1.元素大的优先priority_queue<int> pq;
2.元素小的优先 priority_queue<int, vector<int>, greater<int> >pq;
下面列举一些常用操作
1.back() 返回一个引用,指向最后一个元素
2.empty() 如果队列空则返回真
3.front() 返回第一个元素
4.pop() 删除第一个元素
5.push() 在末尾加入一个元素
6.size() 返回队列中元素的个数
是和大多数据结构一样的。
如果只是单纯的对存整数的数组进行排序,直接定义并使用即可。

priority_queue<int> q;
for(i = 0; i < len; i++) q.push(a[i]);
for(i = 0; i < len; i++){cout<<q.top()<<" ";q.pop();}

相当好用,插入加取出等操作。
但是如果有很多成员变量,只有一个需要优先级,则如此定义:(friend不能省略)

struct node{
    friend bool operator< (node n1, node n2)
    {
        return n1.priority < n2.priority;
    }
    int priority;
    int other_element;
};

然后使用的时候

    priority_queue<node> qn;
    node b[len];
    for(i = 0; i < len; i++)  qn.push(b[i]);
    for(i = 0; i < len; i++){ cout<<qn.top().priority<<" <<qn.top().value<<endl;qn.pop();}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值