联盟的两个向量

时间:2012-10-20 10:38:07

标签: c++ vector

我有矢量A,其中包含数字1,7,9,9,3,13,3 我有矢量B,其中包含数字9,11,7,7,3,2,1

我需要得到向量C,它将包含来自下面两个向量的每个元素,但每个只有一次(例如,来自向量A的数字9不应该重复) 所以C应该包含1,7,9,3,13,11,2

此代码将使矢量C成为两个矢量的并集,但会有一些数字重复(如果一个矢量包含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;
}

它必须尽可能快地工作。 这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

此问题的正确解决方案是先对每个向量进行排序,然后以类似于sink排序的方式获取交集/联合/过滤。