2

我读入了一个字符串,它被分隔为年、月、日、小时、分钟、秒、毫秒。我希望能够比较两个不同的日期/时间戳。前任。检查 lhs 上的小时是否大于 rhs 上的小时。然后继续检查月、日、小时、分钟、秒和毫秒。到目前为止,我已经知道我正在尝试做什么,只是很难把它放在一起。如果有人有任何想法,那就太棒了。附言。这不是家庭作业,我正在构建应用程序,同时学习 c++。

ClassName operator < (ClassName &lhs, ClassName &rhs);

以上是功能。

谢谢!

4

5 回答 5

4

使其成为一个独立的功能:

friend bool operator < (const ClassName &lhs, const ClassName &rhs);

注意变化:

  • 独立的,因为这个函数平等地对待两个操作数,它也不修改。
  • const参数,因为一个理智的比较实现不应该修改它的操作数。
  • return bool,因为理想情况下比较应该返回 a bool,不是吗?
  • friend,因为一个设计良好的类通常会有这些数据成员private

实现应该简单地根据您提到的算法对数据成员进行比较并返回bool结果。

于 2013-03-27T14:08:09.583 回答
1

如果您使用的是 boost 库,请使用日期/时间库。

否则,您可以使用ctime并将时间转换为 UNIX 时间,然后比较只是两个数字的比较。

于 2013-03-27T14:11:55.887 回答
1

在这种特殊情况下,您应该检查确定哪个对象“更大”的各个成员。比较时,bool返回类型应该更好,并使您的参数const不要在函数中更改它们:

bool operator < (const ClassName &lhs, const ClassName &rhs){
    if(lhs.hour > rhs.hour)
       return true;
    return false;
}

请参阅此处以获取一些输入。

于 2013-03-27T14:10:19.240 回答
1

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,它奇妙地减少了代码行数。

于 2013-03-27T14:14:20.497 回答
1

我会使用一堆 if 语句:

if(lhs.year > rhs.year)
else if(lhs.year < rhs.year)
else
{
    and check here for months etc.
}
于 2013-03-27T14:13:26.103 回答