我想将对实例的引用用作排序函数的参数。

我有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){
...
}

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

我怎样才能做到这一点?

最佳答案

简而言之: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
这是因为比较两个对象不应更改它们。

10-06 09:44