gpt4 book ai didi

c++ - 重载小于 (<) 运算符,用于以多种方式对对象进行排序

转载 作者:行者123 更新时间:2023-11-28 01:24:16 26 4
gpt4 key购买 nike

如果一个类重载了一个运算符以便于按特定属性对其对象进行排序,是否有办法再次重载该运算符以按另一个属性排序?

例如,下面的类重载了operator<要比较它的数据成员分钟数,有没有办法对其数据成员小时数做同样的事情,或者我会更好地为每个排序标准创建一个二进制谓词?提前致谢。

class PhoneCall {
friend ostream& operator<<( ostream&,const PhoneCall& );
private:
int minutes;
int hours;

public:
PhoneCall(int = 0);
bool operator<(const PhoneCall&);
};

ostream& operator<<(ostream& out, const PhoneCall& p) {
out << "Phone call lasted " << p.minutes << " minutes" << endl;
return out;
}

PhoneCall::PhoneCall(int ct) {
minutes = ct;
}

bool PhoneCall::operator<(const PhoneCall& p) {
bool less = (minutes < p.minutes)? true: false;
return less;
}

最佳答案

您还可以提供提供替代排序方法的额外友元函数,并且在 c++11 中您可以就地定义它们:

class PhoneCall {
friend ostream& operator<<( ostream&,const PhoneCall& );
private:
int minutes;
int hours;

public:
PhoneCall(int = 0);
bool operator<(const PhoneCall&);
friend bool LessTime(const PhoneCall& L, const PhoneCall& R)
{ return L.minutes+L.hours*60 < R.minutes+R.hours*60; }

};

std::vector<PhoneCall> calls;
std::sort(calls.begin(), calls.end(), LessTime);

此外,您可以在有序容器上重载比较器,例如 set:

std::multiset<PhoneCall, LessTime> timeSet;

与公共(public)静态方法相比,在这里使用内联友元的好处微乎其微。 inline friend 的真正好处是在进行运算符重载时,例如 operator <<

关于c++ - 重载小于 (<) 运算符,用于以多种方式对对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54691001/

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