我有矢量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;
}
它必须尽可能快地工作。 这样做的最佳方式是什么?
答案 0 :(得分:1)
此问题的正确解决方案是先对每个向量进行排序,然后以类似于sink
排序的方式获取交集/联合/过滤。