Do STL谓词需要是纯谓词

Do STL predicates need to be pure predicates?

本文关键字:谓词 STL Do      更新时间:2023-10-16

我所说的"纯"谓词是指它们依赖于它们的参数。下面的函数对象是一个有效的谓词吗?例如,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通过获取谓词,因此每个集合或操作都有自己的实例),它就是正确的(显然它必须满足特定集合或算法的任何其他要求)。

是的,没关系。

只需确保整个操作提供分拣所需的任何稳定性要求。