“纯”谓词是指它们仅取决于其论点。那么以下函数对象是否是用于std::sort的有效谓词?
// A predicate for sorting objects of type T2 that relies on an
// object of type T1.
class APredicate {
T1 &someObj;
APredicate(T1 &someObject) : someObj(someObject) {};
bool operator() (T2 thing1, T2 thing2) {
return someObj.someFn(thing1) < someobj.someFn(thing2);
}
}
这曾经有效吗?一直有效吗?还是取决于someObj.SomeFn()的实际作用?
最佳答案
“仅取决于其参数”实际上是指“如果再次使用相同的参数调用,必须返回与以前相同的结果”。如果您的(特别是someObj
实例)没有更改,那么对于someObj::someFn
的特定实例,从T2
返回的内容将是“纯”的。
只要条件在谓词的特定实例的生存期内成立(STL按值使用谓词,因此每个集合或操作都有其自己的实例),则它是正确的(显然,它必须满足特定谓词的任何其他要求或算法)。