どのように機能するかを理解しようとしています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正しく達成することはできませんか?
編集回答:これらのルールによって、ここ で回答が見つかったことを気にしないでください。そのような演算子は「厳密な弱い順序付け」演算子にはなりません。