首页 > 编程语言 >C++中的结构体内嵌比较函数

C++中的结构体内嵌比较函数

时间:2023-02-16 11:12:39浏览次数:55  
标签:node sort const 函数 C++ 从大到 value 体内

概述

结构体内嵌比较函数有两种比较常见的应用场合: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;

标签:node,sort,const,函数,C++,从大到,value,体内
From: https://www.cnblogs.com/limbercode/p/17125987.html

相关文章