您的当前位置:首页正文

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值,从大到小进行排序

因篇幅问题不能全部显示,请点此查看更多更全内容

Top