【发布时间】:2012-10-20 18:49:46
【问题描述】:
我有一个包含数字 1,7,9,9,3,13,3 的向量 A 我有向量 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;
}
它必须尽可能快地工作。 最好的方法是什么?
【问题讨论】:
-
为什么不使用 C 作为 std::set 和隐蔽集到向量。
-
@MarsRover 您绝对正确,一组在数学和编程上是满足给定要求的正确选择
-
矢量尺寸很大,速度很慢 :( 我需要让它更快地工作