7

標準ライブラリに、並べ替えられた 2 つの範囲間の集合の交差と集合の差を同時に計算する機能があるかどうか疑問に思っています。次の行に沿った署名のあるもの:

template <class Input1, class Input2, 
          class Output1, class Output2, class Output3>
Output3 decompose_sets (Input1 first1, Input1 last1,
                        Input2 first2, Input2 last2,
                        Output1 result1, Output2 result2,
                        Output3 result3 );

の呼び出し後、decompose setsにないresult1すべての要素を含み、にないすべての要素を含み、 とで共通のすべての要素を含むようにします。[first1,last1)[first2,last2)result2[first2,last2)[first1,last1)result3[first1,last1)[first2,last2)

cplusplus.comのサンプル実装はset_differenceset_intersection3 回ではなく 1 回だけスキャンを実行する効率的な実装を作成するのに役立つようです。ただし、標準ライブラリに含まれている場合は、車輪の再発明はしたくありません。

リクエストによる例:

2 つのセット a={0, 1, 2, 3, 4} と b={2, 4, 5, 6} が与えられた場合、次の 3 つのセットを作成したいと思います。

  • only_a = {0,1,3}
  • only_b = {5,6}
  • 共通 = {2,4}
4

3 に答える 3

1

STL にはそのような関数はありませんがset_symmetric_difference()、最初のシーケンスに存在するが 2 番目のシーケンスには存在しない要素の並べ替えられたシーケンスを構築する関数があり、2 番目のシーケンスに存在する要素は最初のシーケンスには存在しません。

于 2013-08-10T17:26:35.177 に答える