Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ STL谓词需要是纯谓词吗?_C++_Stl_Predicate - Fatal编程技术网

C++ STL谓词需要是纯谓词吗?

C++ STL谓词需要是纯谓词吗?,c++,stl,predicate,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) {};

我所说的“纯”谓词是指它们只依赖于它们的参数。那么,下面的函数对象是否是一个有效的谓词,可以在例如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);
    }
}
//一个谓词,用于对依赖于
//类型为T1的对象。
第四类{
T1&someObj;
APredicate(T1&someObject):someObj(someObject){};
布尔运算符()(T2 thing1,T2 thing2){
返回someObj.someFn(thing1)
这有效吗?总是有效的吗?还是取决于someObj.SomeFn()的实际功能?

是的,这很好

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

的“仅取决于它们的参数”实际上意味着“如果使用相同的参数再次调用,必须返回与前面相同的结果”。如果您的(特定实例)
someObj
没有改变它对
someObj::someFn
的返回内容的想法,对于
T2
的特定实例,它是“纯的”


只要条件在谓词的特定实例的生存期内保持不变(STL按值获取谓词,因此每个集合或操作都有自己的实例),它就是正确的(显然它必须满足特定集合或算法的任何其他要求)

可能重复的是。请参阅接受的答案(可能有两份):是。你可以在我之前评论中提供的链接中看到,我不认为这是重复的。是的,这些信息可能是从另一个(更冗长的)问题中收集的,但它肯定不是重复的。@Nawaz:对不起,我删除了您在阅读该链接后但在您的答复出现之前刚刚回复的评论。这取决于实现吗?或者STL保证按值获取谓词吗?@Nigel:保证了。看一看在上声明的原型,例如。