3

数字1、7、9、9、3、13、3を含むベクトルAがあります数字9、11、7、7、3、2、1を含むベクトルBがあります

以下の2つのベクトルからすべての要素を含むベクトルCを取得する必要がありますが、それぞれ1回だけです(たとえば、ベクトルAの数値9は繰り返さないでください)。したがって、Cには1,7,9,3,13,11,2が含まれている必要があります。

このコードは、2つのベクトルの和集合となるベクトルCを作成しますが、いくつかの数が繰り返されます(1つのベクトルに3xの数1が含まれる場合、Cには3xの数1も含まれます)

vector<int>union(vector<int>A,vector<int>B)
{ 
    sort(A.begin(),A.end());
    sort(B.begin(),B.end());
    vector<int> C(A.size()*2);            //vector A has same size as vector B

    vector<int>::iterator it= set_union(A.begin(),A.end(),B.begin(),B.end(),C.begin());
    C.resize(it-C.begin());
    return C;
}

できるだけ速く動作する必要があります。それを行うための最良の方法は何ですか?

4

1 に答える 1

1

この問題の正しい解決策は、最初に各ベクトルを並べ替えてから、sink並べ替えと同様の方法で交差/和集合/フィルタリングを取得することです。

于 2012-10-20T10:44:42.360 に答える