C++优先队列(priority queue)及重载运算符

定义:

普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。

头文件:

#include <queue>
运算符重载:

 friend bool operator<(node n1,node n2)
                return n1.elem>n2.elem;

  这是根据node结构体中的elem升序构建的一个操作符,   如果想要降序就把>换成<
关于优先队列的定义:
priority_queue<node>q;//其中node为结构体名称,q为优先队列名称

先上几个介绍优先队列的博客:

1.   优先级队列几个应用详解

2.     优先队列详解

3.    优先队列priority_queue 用法详解

http://blog.csdn.net/yuanjilai/article/details/8043157

关于运算符的重载:

struct point{    
    int x;    
    int y;    
    int times;    
    friend bool operator < (point a, point b)    
    {    
        return a.times > b.times;    //重载小于号使得小的先出队列    
    }    
};    


在此处定义一个优先队列priority_queue<point> q;

如果要按照以times进行从小到大排列,操作如上。

进行重载<操作符。

意思是如果a.times > b.times成立,那么结构体point a < point b成立。由于优先队列是按照从大到小排列,所以结构体b会排列到a之前,然而b.times是最小的,所以实现了按照times的从小到大排序,其实用一句话说就是要想b更大那么b.times.

***在结构体中比较时需要进行运算符的重载(重载<),在不需要结构体时:

priority_queue<int,vector<int>,less<int>>s;//定义优先级队列s,less表示按照递减(从大到小)的顺序插入元素
priority_queue<int,vector<int>,greater<int>>s;//定义优先级队列s,greater表示按照递增(从小到大)的顺序插入元素

优先队列(priority_queue)的基本操作:

empty(); 队列为空返回1
pop();   出队
push();  入队
top();   返回队列中优先级最高的元素
size();  返回队列中元素的个数



  • 33
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值