0

A と B という 2 つのベクトル オブジェクトがあります。MyType クラスにフィールド ID がなく、A にはあるが B にははない MyType* を取得したいと考えています。

ID がないため、文字列フィールドに基づいて比較する必要があります。

私のオブジェクトのクラスは次のようになります

 class Object 
    {
       public:
               Object();
       string      Name;
       bool        Mode;
       string      something;
       Int         range;
    }


    vector<Object*> a; //asssume filled with objects
    vector<Object*> b; //asssume filled with objects
    vector<Object*> ret; 

(a,b)ここで、b ではなく a にあるすべてのメンバーのdiff を取得したいと考えています。

これをどのように進めるか。を使用strcmp()して比較しようとしましたが、機能していません。

4

3 に答える 3

1

これは、既存のSTLアルゴリズムを使用します。

bool compPtrByName(Object *const &p1, Object *const &p2) {
    return p1->Name < p2->Name;
}

その後、電話します

std::sort(a.begin(), a.end(), compPtrByName);
std::sort(b.begin(), b.end(), compPtrByName);
std::set_difference(a.begin(), a.end(), b.begin(), b.end(), ret.begin(), compPtrByName);

ベクトルの並べ替えが許可されていない場合は、最初にそれらをコピーします。

注:これにより、集合の差A-Bが得られます。対称差(A-B)和集合(B-A)の場合は、を使用しますstd::set_symmetric_difference

于 2013-03-01T05:26:30.190 に答える
-1

set_differenceこれは(http://www.cplusplus.com/reference/algorithm/set_difference/)にとって完璧な仕事のようです。

オブジェクトにコンパレータを提供し、(そのコンパレータを使用して) 2 つのベクトルを並べ替えてから、set_difference(同じコンパレータを使用して) を使用して、2 番目ではなく 1 番目にあるオブジェクトを取得します。

于 2012-10-12T09:55:33.270 に答える