“纯”谓词是指它们仅取决于其论点。那么以下函数对象是否是用于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按值使用谓词,因此每个集合或操作都有其自己的实例),则它是正确的(显然,它必须满足特定谓词的任何其他要求或算法)。

10-08 04:02