2013-04-16 42 views
1

我想使用对我的实例的引用作为排序函数的参数。对std进行排序的功能:用&参数C++排序

我有vector<CMail> log,类CMail有我想要的功能。

而一个要排序log所以我必须:

bool sortFunction(CMail a, CMail b){ 
    return (a.CompareByTimeStamp(b) < 0) ? true : false; 
} 

然后

sort(log.begin(), log.end(), sortFunction); 

它工作正常。但是,我可以将函数的参数作为参考吗?

bool sortFunction(CMail &a, CMail &b){ 
... 
} 

当我这样做,我的代码没有编译。

我该怎么做?

+0

关闭我的头顶,我相信他们必须是'const CMail&'。编辑:[是](http://en.cppreference.com/w/cpp/algorithm/sort)。 – BoBTFish

+0

另外,作为提问时的一般规则,您应该包含完整的编译器错误。 – BoBTFish

回答

5

总之:const ness。 您需要:

bool sortFunction(const CMail& a, const CMail& b){ 
    return (a.CompareByTimeStamp(b) < 0); 
} 

这也意味着你的CompareByTimeStamp签名必须是:

int CompareByTimeStamp(const Cmail& other) const; // (inside class Cmail {...};) 
//     ^b is const  ^a is const 

here。 这是因为比较两个对象不应该改变它们。

+0

很好,谢谢:) –