我正在尝试按照某人试图简化C ++排序参考http://www.cplusplus.com/forum/beginner/4817/的链接,但是我无法使用bool
运算符函数来编译它的方式。
我有事件对象的向量。我想根据事件开始时间对矢量进行排序。如果开始时间是数字,这将更容易,但它们是字符串,所以我不得不编写函数转换为uint64_t
,我的所有代码到这种排序尝试都正常工作。这是我试图开始工作的代码:
bool功能:
bool EWriter:: operator () ( Event &a, Event &b){
return (stringToTime(stringReturnWrap(a.getBeginTime())) < stringToTime(stringReturnWrap(b.getBeginTime())));
}
此代码编译但我无法弄清楚如何给它命名,因此我无法在排序中引用它。另外,我宁愿重载<
运算符,但我一直得到一个需要第三个参数的错误。
这是我的排序:
sort(events->begin(), events->end(), someFunctionName);??
稍微不相关的是我知道我应该在args中使用const但是如果我实现了它们,我就不能调用Event类的函数。
答案 0 :(得分:2)
通过重载operator()
,您已将EWriter
设为functor。
只需传递EWriter
的实例。
如果EWriter
有默认构造函数,您可以使用:
sort(events->begin(), events->end(), EWriter());
或者传递一个已经存在的EWriter
。
答案 1 :(得分:0)
您正在重载括号运算符:
bool EWriter:: operator () ( Event &a, Event &b){
return (stringToTime(stringReturnWrap(a.getBeginTime())) < stringToTime(stringReturnWrap(b.getBeginTime())));
}
尝试:
bool EWriter:: operator <( Event &a, Event &b){
return (stringToTime(stringReturnWrap(a.getBeginTime())) < stringToTime(stringReturnWrap(b.getBeginTime())));
}