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

2 つの入力セットは、最後の引数であるコンパレータに従って並べ替える必要があります。

  • 最初の例ではそうであり、関数は正しく機能します。

  • セットは に従ってソートされていませんthrust::greater<int>()。前提条件が満たされていないため、関数はそのジョブを実行できません。

  • thrust::equal_to<int>()有効なコンパレータでさえありません。

于 2014-01-12T14:32:29.063 に答える