Как работает тяга set_intersection?

Я пытаюсь понять, как thrust::set_intersection работает, но из результатов моего теста я еще больше запутался в том, что делает эта функция.

Вот несколько примеров:

const int size1 = 5;
const int size2 = 5;
int A1[size1] = { 2, 3, 4, 5, 6 };
int A2[size2] = { 1, 2, 3, 4, 5 };
int *result = new int[1000];
int *result_end = thrust::set_intersection(A1, A1 + size1, A2, A2 + size2, result, thrust::less<int>());

возвращается 2, 3, 4, 5

thrust::equal_to<int>()

возвращается 2, 3, 4, 5, 6

thrust::greater<int>()

ничего не возвращает

Я понимаю, что по умолчанию set_intersection согласен ли я с результатом, но для любого другого примера я полностью потерян, откуда пришел результат? Или как это было рассчитано?

Известно, как работает этот алгоритм? Может кто-нибудь объяснить это?

РЕДАКТИРОВАТЬ:

Моя цель — 2 набора кортежей (скажем, размера 2):

A={(1, 1), (2, 2), (3, 3)}
B={(0, 2), (2, 2), (3, 3)}

Поэтому я хочу определить оператор на кортежи, как>< который возвращает все элементы, которые удовлетворяют оператору:

>< определяется как a.first > b.first && a.second < b.second

поэтому ответ только A [0] и B [0].

Таким образом, вы не можете достичь этого с set_intersection право?

РЕДАКТИРОВАТЬ ответ:
Неважно, я нашел ответ Вот по этим правилам такой оператор не будет оператором «Строгого слабого порядка».

0

Решение

По двум входным наборам нужно отсортировать по последнему аргументу, компаратору.

  • В первом примере они есть, и функция работает правильно.

  • Наборы не отсортированы в соответствии с thrust::greater<int>(), Поскольку предварительные условия не выполнены, функция не может выполнять свою работу.

  • thrust::equal_to<int>() даже не действительный компаратор.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]