C++中的结构体内嵌比较函数
概述
结构体内嵌比较函数有两种比较常见的应用场合:sort()和优先队列priority_queue<>
其中,sort默认从小到大排序,优先队列从大到小排序,要改变默认的次序,必须上比较函数
壹个栗子:
struct node
{
int l,r;
bool operator <(const node &rhs)const{
return r < rhs.r;
}
}a[n]
vector<node> v;
注1:
首先解释一下两个const:
第一个const 是为了保证引用传递进来的参数不被修改,我们知道传递有value pass和refer. pass,如果传进来的是引用,那么在函数内部可能会使其修改,而此处是重载<操作符,故用const。
第二个const 是为了防止出现二义性,如果没写const,那再body外调用时如果使用了const,则会出现二义性.
注二:
直接写比较函数是裸的r表示当前的值,如果r<a.r,那么就是从小到大排序,优先队列里是从大到小。
如果是r>rhs.r,则反过来,即sort从大到小,优先队列从小到大
注三:
只能重载<,不能重载> (会编译错误)
注四
使用: sort(v.begin(),v.end())
除了这种方法,sort还可以用一个cmp函数来实现
比如:
bool cmp(node a,node b){
return a.r<b.r;
}
sort(v.begin(),v.end(),cmp)
还可以这么写:(匿名函数)
sort(v.begin(), v.end(), [] (const node& u, const node& v) { return u.r > v.r; });//按照r从大到小
注五:
优先队列还可以写成这样:
1.重载:
bool operator < (const node &a, const node &b)
{
return a.value < b.value; // 按照value从大到小排列
}
priority_queue<node>q;
2.友元
struct node{
int value;
friend bool operator<(const node &a,const node &b){
return a.value<b.value; //按value从大到小排列
}
};
priority_queue<node>q;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律