关于operator

最近经常看到在自定义set和自定义优先队列中经常看到bool operator,就想问一下,这个到底是什么意思呢,在社区搜索大多都是那种过于精细的回答,刚刚入门c++,大多数都看不懂QAQ
比如这个,,

struct cmp
{
    bool operator()(int a,int b)
    {
        if(abs(a-b)<=k) return false;
        return a<b;
    }
};

还有这个


struct node
{
    int x,y;
    friend bool operator<(node a,node b)
    {
        return a.x>b.x;
    }
};

operator是用来重载运算符的,C++的符号都是有默认的规则的,你可以重载他们去定义自己想要的规则
比如你第一个例子,()是函数用来传参数的,你可以重载()来定义一个你自己的规则,C++中称为仿函数
比如你第二个例子,<是比较两个数字的,你可以重载它,去进行结构体之间或者类之间的比较

这是运算符重载,其中bool是函数返回值,operator后面跟的是运算符。比如上面cmp里定义了operator()运算符重载函数,那么你就可以这样调用它

int a = 1, b = 2;
cmp c;
if (c(a, b)) {
    // ...
}

同样上面node里定义了operator<()运算符重载友元函数,那么就可以这样比较两个节点

node a = {1, 2};
node b = {3, 4};
if (a < b) {
    // ...
}