2013-10-31 1 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; 
} 

나는이 술어 greater_equal predicate 이후 출력 a contains bab의 모든 요소를 ​​만족해야한다 것이라고 예상하고 있었다, 그러나 그렇지 않습니다. 나는 그 사용법에 대해 약간 혼란 스럽다. 도와주세요.

+1

[ "두 번째 버전에서는 지정된 비교 함수 'comp'를 사용하여 두 번째 버전을 정렬 할 것으로 예상합니다.]] (http://en.cppreference.com/w/cpp/algorithm/includes) 배열은 정렬되지 않습니다. 귀하의 비교 자에 대한 존중). – BoBTFish

답변

4

정렬 된 시퀀스의 모든 알고리즘과 마찬가지로 비교기는 시퀀스를 정렬하는 데 사용되는 것과 동일해야합니다. greater_equal은 엄격한 순서 지정을 제공하지 않으므로 유효하지 않습니다.

includes은 각 쌍의 입력에 대해 비교기가 true인지 확인하지 않습니다. 비교 자에 의해 정의 된 순서에 따라 두 값이 같은지 여부를 확인합니다. 즉, !comp(a,b) && !comp(b,a)을 확인합니다. greater_equal과 같은 엄격하지 않은 비교기의 경우에는 절대로 적용되지 않습니다.

+0

배열이이 순서로 정렬되기 때문에'less predicate '을 사용하면이 출력에'a contains b'가 표시됩니까? –

+0

@mozart : 아니요. 왜냐하면'a'는'b'를 포함하고 있지 않기 때문입니다. ('b'는 정렬되지 않았기 때문에 아무 것도 할 수 있습니다.) –

+0

그러면 여기에 술어를 사용하는 것은 무엇입니까? 더 많은 정보를 얻기 위해 링크를 제공 할 수 있습니까? 나는'b'도 분류했다. 안 그랬어? –

관련 문제