STL谓词需要为纯谓词吗?

| “纯”谓词是指它们仅取决于其论点。那么以下函数对象是否是用于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
的特定实例没有改变,那么对于
T2
的特定实例从
someObj::someFn
返回的结果的主意就是“纯”。 只要条件在谓词的特定实例的生存期内成立(STL按值使用谓词,因此每个集合或操作都有其自己的实例),则它是正确的(显然,它必须满足特定谓词的任何其他要求或算法)。     
是的,没关系。 只要确保整个操作提供排序所需的任何稳定性要求即可。     

要回复问题请先登录注册