1

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

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

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

我怎样才能做到这一点?

4

1 回答 1

5

简而言之:const尼斯。你需要:

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

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

于 2013-04-16T13:15:55.340 回答