sort与结构体中的运算符重载

C++中重载小于号,通常是为了使用STL的算法。 举个最为简单的例子,排序。

std::sort排序是基于大小顺序的,基本类型之间就存在大小于的关系, 排序就是按照从小到大的顺序调整序列。

在结构体中,因为这个结构体类型是你自己定义的,计算机并不知道<是根据什么来比较大小的,如果你要这样用
node a,b;
a<b;
就得让计算机知道当 <左右两边是node类型的值的时候,是根据什么逻辑来返回值的,比如 1<3这个是根据实数的大小来返回真假。

重载运算符的格式如下:

bool operator 运算符 (const 结构体名称 b) const

{
    return(什么时候这个运算符对结构体成立);

}

struct Edge     // 存储边
{
    int a, b, w;//w为边的权重

    bool operator< (const Edge &W)const
    {
        return w < W.w;
    }
}edges[M];

告诉计算机是根据边的权重的大小来返回真假的;

sort(edges, edges + m);

如果自定义的话就是这样:

bool cmp(Edge &a,Edge &b){
    return a.w < b.w;
}

sort(edges,edges+m,cmp);

正常次序的重载:

struct node{
	int w;
	bool operator <(const node a)const{//记住!!!
		return w<a.w;
	}
}e[maxn];

priority_queue<node> q; //此时的优先队列是按结构体的w值,从大到小排列
sort(e,e+n);//按照结构体的w值,从小到大进行排序

相反次序的重载:

struct node{
	int w;
	bool operator <(const node a)const{
		return a.w<w;//在这里改变一下位置即可
	}
}e[maxn];
priority_queue<node> q; //此时的优先队列是按结构体的w值,从小到大排列
sort(e,e+n);//按照结构体的w值,从大到小进行排序
  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值