我读入了一个字符串,它被分隔为年、月、日、小时、分钟、秒、毫秒。我希望能够比较两个不同的日期/时间戳。前任。检查 lhs 上的小时是否大于 rhs 上的小时。然后继续检查月、日、小时、分钟、秒和毫秒。到目前为止,我已经知道我正在尝试做什么,只是很难把它放在一起。如果有人有任何想法,那就太棒了。附言。这不是家庭作业,我正在构建应用程序,同时学习 c++。
ClassName operator < (ClassName &lhs, ClassName &rhs);
以上是功能。
谢谢!
使其成为一个独立的功能:
friend bool operator < (const ClassName &lhs, const ClassName &rhs);
注意变化:
const
参数,因为一个理智的比较实现不应该修改它的操作数。bool
,因为理想情况下比较应该返回 a bool
,不是吗?friend
,因为一个设计良好的类通常会有这些数据成员private
。实现应该简单地根据您提到的算法对数据成员进行比较并返回bool
结果。
在这种特殊情况下,您应该检查确定哪个对象“更大”的各个成员。比较时,bool
返回类型应该更好,并使您的参数const
不要在函数中更改它们:
bool operator < (const ClassName &lhs, const ClassName &rhs){
if(lhs.hour > rhs.hour)
return true;
return false;
}
请参阅此处以获取一些输入。
operator <
应该返回一个bool
值:
bool operator < (const ClassName &l, const ClassName &r)
{
return
std::tie(l.year, l.month, l.day, l.hour, l.minute, l.second, l.millisecond)
<
std::tie(r.year, r.month, r.day, r.hour, r.minute, r.second, r.millisecond);
}
而且您可以使用std::tie
,它奇妙地减少了代码行数。
我会使用一堆 if 语句:
if(lhs.year > rhs.year)
else if(lhs.year < rhs.year)
else
{
and check here for months etc.
}