STL谓词需要是纯谓词吗?

时间:2011-05-25 05:42:21

标签: c++ stl predicate

“纯粹”谓词我的意思是他们只依赖于他们的论点。以下函数对象是一个有效的谓词,例如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()实际上做了什么?

2 个答案:

答案 0 :(得分:2)

“仅取决于他们的参数”实际上意味着“如果再次使用相同的参数调用,则必须返回与之前相同的结果”。如果您({1}}的特定实例({1}}没有改变它,请注意someObjsomeObj::someFn的特定实例返回的内容,“纯粹”。< / p>

只要条件适用于谓词的特定实例的生命周期(STL通过获取谓词,因此每个集合或操作都有自己的实例),它是正确的(显然它有满足特定集合或算法的任何其他要求)。

答案 1 :(得分:1)

是的,没关系。

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