2011-05-25 99 views
1

「純」謂詞我的意思是他們只有取決於他們的論點。因此,下面的函數對象是一個有效的謂語,用於說,std :: sortSTL謂詞是否必須是純謂詞?

// 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()實際上做了什麼?

+0

可能重複[std :: set'有什麼問題?](http://stackoverflow.com/questions/5397616/what-is-wrong-with-stdset) – Nawaz 2011-05-25 05:49:50

+0

是的。請參閱可能的重複答案:[std :: set'有什麼問題?](http://stackoverflow.com/questions/5397616/what-is-wrong-with-stdset) – Nawaz 2011-05-25 05:50:59

+0

是的。你可以在我之前的評論中提供的鏈接中閱讀。 – Nawaz 2011-05-25 06:02:27

回答

2

「只依賴於它們的參數」實際上是指「如果再次調用相同的參數,必須返回與先前相同的結果」。如果您的someObj(的特定實例)沒有改變它想要從someObj::someFn返回什麼T2的特定實例,它「純」。

只要條件成立的謂詞(STL通過需要謂詞,所以每個集合或操作有其自己的實例)的具體實例的壽命,這是正確的(顯然它必須滿足任何其他特定集合或算法的要求)。

+0

該實現是否依賴於?或者STL保證按價值判斷謂詞? – 2011-05-25 06:47:09

+0

@Nigel:有保證。看看在例如聲明的原型http://www.sgi.com/tech/stl/transform.html。 – 2011-05-25 07:50:32

1

是的,沒關係。

只要確保整個操作提供排序所需的任何穩定性要求即可。