如何使用includes()算法使用greater_equal谓词?

时间:2013-10-31 11:27:33

标签: c++ predicate c++-standard-library

我尝试将greater_equal predicateincludes() algorithm一起使用。我写了以下代码:

#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应该满足ba中{{1}}中的所有元素,但事实并非如此。我对它的用法有点困惑。请帮忙。

1 个答案:

答案 0 :(得分:4)

与排序序列上的所有算法一样,这要求比较器与用于对序列进行排序的比较器相同;并且greater_equal对此无效,因为它没有严格的排序。

includes不检查每对输入的比较器是否为真;它根据比较器定义的顺序检查这两个值是否相等。也就是说,它会检查!comp(a,b) && !comp(b,a)。对于像greater_equal这样的非严格比较器,情况永远不会如此。