【C++】操作符重载

一、前言

昨晚受高人指点:如何实现当优先队列里的元素是结构体时,按照指定要求排序——利用操作符重载。现把这个方法分享给大家~

二、优先队列

首先认识优先队列

优先队列的本质是堆,但它具有队列的所有操作,比如push(),pop(),top(),empty()…;它与普通队列不同的是它会自动按照优先级顺序排序,相当于在队列的基础上加了个堆排序

头文件:<queue>、<functional>

大顶堆(降序)定义 默认

priority_queue<int> big_heap;

小顶堆(升序)定义 需要加参数

priority_queue<int,vector<int>,greater<int> > small_heap;

现在我们思考,如果我们要加入这个优先队列的不是一个数字,而是一个结构体,应该怎么按照指定规则排序呢?
例如:现在我们要把node放进优先队列里,并要求队头是v最大的节点,如果v相同,则取inx最小的

struct node{
	int v;
	int inx;
};

为达目的我们需要在结构体里重载操作符 < (重载小于号和重载大于号是等价的)

struct node{
	int v;
	int inx;
	//构造函数 
	node(int vv,int inxx){
		v=vv;
		inx=inxx;
	}
	//析构函数 
	~node(){
	}
	//小于运算符重载
	bool operator < (const node&right) const {
		if(v!=right.v) return v<right.v
		else inx>right.inx
	} 
}a[N];

是不是感觉和面向对象编程时使用class几乎一模一样,其实就是一个道理,习惯用class的同学直接用class取代struct也是可以的
如果希望队头是v最小的节点,如果v相同,则取inx最小的,改一下下面第二行代码就可以啦

	bool operator < (const node&right) const {
		if(v!=right.v) return v>right.v
		else inx>right.inx
	} 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值