0

我试图弄清楚它是如何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)}

所以我想在像 >< 这样的元组上定义 on 运算符,它返回所有满足运算符的元素:

><定义为a.first > b.first && a.second < b.second

所以答案只有 A[0] 和 B[0]。

所以你不能用set_intersection正确的方式实现这一点?

编辑答案: 没关系,我通过这些规则在这里找到了答案,这样的运算符不会是“严格的弱排序”运算符。

4

1 回答 1

2

To two input sets need to be sorted according to the last argument, the comparator.

  • In the first example they are, and the function works correctly.

  • The sets are not sorted according to thrust::greater<int>(). Since the prerequisites are not met, the function cannot do its job.

  • thrust::equal_to<int>() is not even a valid comparator.

于 2014-01-12T14:32:29.063 回答