结构体内嵌比较函数bool operator < (const p &a)const

最近看见有人在使用sort()函数进行排序时,使用 operator <(const node &a)const 这种形式, 自己不是很懂,所以查了下资料,记录一下。

struct node {  //定义一个结构体node(节点)
   int x;
   int y;
   int len;   //node中有3个成员变量x,y,len
   bool operator <(const node &a)const { //重载<操作符。可以对两个node使用<操作符进行比较
       return len<a.len;
   }
};

直接写比较函数是裸的len表示当前的值,如果len<a.len,那么就是从小到大排序。
括号中的const表示参数a对象不会被修改,最后的const表明调用函数对象不会被修改!

例如:

#include <iostream>
#include <algorithm>

using namespace std;

struct node {  //定义一个结构体node(节点)
    int x;
    int y;
    int len;   //node中有3个成员变量x,y,len
    node(){} // 用以不初始化就定义结构体变量
    node(int _x, int _y, int _len): x(_x), y(_y), len(_len) {}
    bool operator <(const node &a)const { //重载<操作符。可以对两个node使用<操作符进行比较
        return len < a.len;
    }
};

int main()
{
    node pt[3];
    pt[0] = node(1, 2, 6);
    pt[1] = node(3, 4, 4);
    pt[2] = node(6,1, 9);
    sort(pt, pt + 3);

    for(int i = 0; i < 3; i ++)
        cout << pt[i].len << " ";

    return 0;
}

直接使用sort(pt, pt + 3) 就可以完成对pt数组的排序。
另外,也可以使用自己定义bool cmp(node a, node b)来实现

#include <iostream>
#include <algorithm>

using namespace std;

struct node {  //定义一个结构体node(节点)
    int x;
    int y;
    int len;   //node中有3个成员变量x,y,len
    node(){} // 用以不初始化就定义结构体变量
    node(int _x, int _y, int _len): x(_x), y(_y), len(_len) {}
//    bool operator <(const node &a)const { //重载<操作符。可以对两个node使用<操作符进行比较
//        return len < a.len;
//    }
};
bool cmp(node a, node b)
{
    return a.len < b.len;
}
int main()
{
    node pt[3];
    pt[0] = node(1, 2, 6);
    pt[1] = node(3, 4, 4);
    pt[2] = node(6,1, 9);
    sort(pt, pt + 3, cmp);

    for(int i = 0; i < 3; i ++)
        cout << pt[i].len << " ";

    return 0;
}

ps: caiji一枚,努力刷题~~~

posted @ 2021-08-16 18:11  CharlesLC  阅读(814)  评论(0编辑  收藏  举报