2

文字列のベクトルと自分のデータ型のベクトルを処理する集合演算を提供するC++クラスを作成したいと思います。データ型ごとに異なる関数を作成するのではなく、これを行う簡単な方法はありますか?これまで、文字列ベクトルの操作を記述してきました。以下に私の集合和集合の例を示します。

vector<string> SetOperations::set_union(vector<string> set1,
                                        vector<string> set2) {
    for(std::vector<int>::size_type i = 0; i < set1.size(); i++) {
        set1.push_back(set2.at(i));
    }
    return set1;
}

だからまた同じことをしたいのですが、どこが様々なメンバーの構造体であるstringかということです。my_data_type次のようになっているとしましょう。

struct my_data_type {
    int label;
    vector<string> x;
    vector<string> y;
    string str;
};

各データ型の関数も私の関数ほど単純ではありません。set_union(...)なぜならmy_data_type、集合の共通部分の場合、の各メンバーの同等性をテストする必要があるからです。

また、私はC ++にまったく慣れていないので、既存の関数についてのコメントもいただければ幸いです。

どうもありがとう。

4

2 に答える 2

6

これらのいくつかはすでに存在し、アルゴリズムヘッダーにあります。

  • set_union
  • set_difference
  • set_intersection
  • set_symmetric_difference

これらはすべてコンパレータ機能をサポートしているため、独自のすべてのデータ型に対してそれを実行できます。または、他の返信に投稿されているように、コンテナをSTL要件に準拠させます。

参照:http ://www.cplusplus.com/reference/algorithm/

于 2011-06-09T12:38:53.867 に答える
3

すでにそのようなアルゴリズム(和集合、共通部分、ソートなど)があります:http ://www.cplusplus.com/reference/algorithm/

要素は、STLコンテナ要素の要件を満たす必要があります(http://msdn.microsoft.com/fr-fr/library/bb385469.aspxを参照)。

STL / CLRコンテナに挿入されるすべての参照型には、少なくとも次の要素が必要です。

パブリックコピーコンストラクタ。

パブリック代入演算子。

パブリックデストラクタ。

さらに、setやmapなどの連想コンテナには、パブリック比較演算子を定義する必要があります。これは、デフォルトではoperator<です。コンテナーに対する一部の操作では、パブリックデフォルトコンストラクターとパブリック等価演算子を定義する必要がある場合もあります。

参照型と同様に、連想コンテナに挿入される参照型への値型とハンドルには、operator<などの比較演算子を定義する必要があります。パブリックコピーコンストラクタ、パブリック代入演算子、およびパブリックデストラクタの要件は、値型または参照型へのハンドルには存在しません。

演算子のオーバーロード(カスタムクラスに実装される)に関する情報は、そのWikiBookで見つけることができます:http://en.wikibooks.org/wiki/C++_Programming/Operators/Operator_Overloading

于 2011-06-09T12:31:36.990 に答える