使用比较函数对对象矢量进行排序

时间:2011-12-20 20:39:59

标签: c++ sorting vector

我正在尝试按照某人试图简化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类的函数。

2 个答案:

答案 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()))); 

}