gpt4 book ai didi

c++ - 运算符重载如何在 cpp 中进行排序?

转载 作者:行者123 更新时间:2023-11-30 04:46:48 26 4
gpt4 key购买 nike

我知道用于排序的比较器,我知道 comp(x,y) 应该返回 true 以获得 vector 中的顺序 ..,x ,....,y..。

bool comp(int x,int y){
return occurences[x]<occurences[y];
}

排序(data.begin(),data.end(),cmp);根据 x 将跟随 vector 中的 y (...x..y..)

但是最近我了解到使用运算符重载也是同样的事情,对此我有些怀疑。

struct Edge{
int u,v,weight;
bool operator < (Edge const& other){
return weight < other.weight;
}
}

1) 它会以同样的方式工作吗?如果当前边缘权重像这里一样

2)哪个先来,我的意思是上面的格式 comp(x,y) return true那么 x 将首先出现 但是这里的标准是什么,因为看起来我们在运算符重载函数中仅在此处传递参数。就像我们比较 Edge1(weight=40) < Edge2(weight=60) 那么哪个会来首先,为什么?

最佳答案

当声明一个类的成员函数时,有一个“不可见”的第一个参数:this

所以在类之外函数看起来像这样:

bool operator < (const Edge* this, Edge const& other)
{ return this->weight < other.weight; }

所以左边(第一个)变量总是this右边的(第二个)变量是other .

另一种看待方式就像阿空加瓜建议的那样:

表达式 x < y映射到 Edge x, y; x.operator<(y); – 这是明确地调用运算符(operator)。

有关运算符重载的更多详细信息:What are the basic rules and idioms for operator overloading?

关于c++ - 运算符重载如何在 cpp 中进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56556637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com