2013-10-31 20 views
0

我試圖使用greater_equal predicateincludes() algorithm。我寫了下面的代碼:如何在includes()算法中使用greater_equal謂詞?

#include <iostream> 
#include <algorithm> 
#include <functional> 

int main() 
{ 
    int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 10, 9, 10}; 
    int b[] = {4, 3, 5, 1, 2, 6, 8, 9, 7, 10, 11}; 
    unsigned int alen = sizeof(a)/sizeof(int), blen = sizeof(b)/sizeof(int); 
    std::sort(a, a + alen); 
    std::sort(b, b + blen); 

    if(std::includes(a, a + alen, b, b + blen, std::greater_equal<int>())) 
     std::cout << "a contains b" << std::endl; 
} 

我期待這將輸出a contains b因爲謂語greater_equal predicate應該滿足於b是在a的所有元素,但事實並非如此。我對它的用法有點困惑。請幫忙。

+1

[「第二個版本期望它們使用給定的比較函數'comp'進行排序。」](http://en.cppreference.com/w/cpp/algorithm/includes)數組不排序尊重你的比較)。 – BoBTFish

回答

4

像所有排序序列的算法一樣,這需要比較器與用於排序序列的算法相同;和greater_equal不適用於此,因爲它沒有給出嚴格的排序。

includes不檢查比較器對於每對輸入是否爲真;它根據比較器定義的順序檢查兩個值是否相等。也就是說,它檢查!comp(a,b) && !comp(b,a)。對於像greater_equal這樣的非嚴格比較器,這絕不會是真的。

+0

如果我使用'less predicate',這個輸出應該包含b',因爲數組將按照這個順序排序? –

+0

@mozart:不,因爲'a'不包含'b'。 (雖然'b'沒有排序,它可以做任何事情)。 –

+0

那麼在這個謂詞中有什麼用呢?你能提供更多信息的鏈接嗎?我也排序了'b'。我不是嗎? –