Я пытался использовать greater_equal predicate
с includes() 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
должны быть удовлетворены все элементы в b
которые находятся в a
, но это не так. Я немного запутался по поводу его использования. Пожалуйста помоги.
Как и все алгоритмы для отсортированных последовательностей, для этого требуется, чтобы компаратор был таким же, как тот, который использовался для сортировки последовательности; а также greater_equal
не действует для этого, поскольку не дает строгого порядка.
includes
не проверяет, является ли компаратор истинным для каждой пары входов; он проверяет, являются ли два значения эквивалентными в соответствии с порядком, определенным компаратором. То есть он проверяет, что !comp(a,b) && !comp(b,a)
, Это никогда не будет правдой для такого строгого компаратора, как greater_equal
,
Других решений пока нет …