【问题标题】:Union of two vectors两个向量的并集
【发布时间】: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 您绝对正确,一组在数学和编程上是满足给定要求的正确选择
  • 矢量尺寸很大,速度很慢 :( 我需要让它更快地工作

标签: c++ vector


【解决方案1】:

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

【讨论】:

  • 哪个 std::set 可以正常工作,没有冒泡或水槽排序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-22
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
相关资源
最近更新 更多