【问题标题】:How to compare two vectors of a same object and get other elements如何比较同一对象的两个向量并获取其他元素
【发布时间】:2013-02-15 05:43:48
【问题描述】:

我想比较两个对象向量元素并相应地获取同一对象的其他向量元素。例如对象有一个向量; foo1.a=[4 2 1 3] foo2.a=[2 1 4] 我想找到相同的元素,然后根据我从foo.a 获得的发现,相应地获取其他向量包含,例如foo1.b=[8 8 2 10]foo2.b=[8 2 8]。我试图比较循环中的两个向量,然后得到相同的结果,但我失败了。

【问题讨论】:

  • 我不明白。你想比较两个向量元素吗?还是两个向量?以及如何生成结果向量?
  • 天哪,一个段落很难解析......
  • 比较a 向量,如果它们具有相同的元素,则从b 向量中获取相同的索引元素。如果它们不同,我还想在b 中获取相应的索引元素。如您所见,两个a 向量具有相同的元素,我不想两次获得相同的元素。
  • 我要尝试一下:foo1.afoo2.a 有共同的元素[2,1,4],所以你想比较集合{foo1.b[2], foo1.b[1], foo1.b[4]},即{8,8,10} ,针对集合{foo2.b[2], foo2.b[1], foo2.b[4]},即{8,2,nan},如果集合相同则返回true? 那个对吗?老实说,先生,这个样本需要一个清晰、易于理解的严肃样本,并展示显示您正在寻找的内容所需的所有数据值。
  • 如果你注意到,我们在两个向量中都有相同的元素。我们应该把foo1.a[1]=4=foo2.a[3]foo1.b[1]=8=foo2.b[1] 放在一起。首先,正如 WhozCraig 所说,我们必须找到共同的元素,2,1,4,然后得到两个 b 向量中相同的对应元素。最后,我们需要在 b 中获得不同的 ,3。很抱歉给您带来不便和我的语法

标签: c++ vector


【解决方案1】:

给定两个向量:

std::vector<int> v1; // {4, 2, 1, 3};
std::vector<int> v2; // {2, 1, 4};

首先sort这两个向量,这样就很容易找到共同的元素:

std::sort(v1); // {1, 2, 3, 4}
std::sort(v2); // {1, 2, 4}

使用set_intersection 查找共同元素:

std::vector<int> vi;
std::set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), vi.begin()); // {1, 2, 4}

使用set_difference 查找独特元素:

std::vector<int> vd;
std::set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), vd.begin()); // {3}

【讨论】:

  • 问题不仅仅在于寻找两个向量或集合的交集或差异。然后我们应该在b中找到对应的元素分配到其他向量中。
猜你喜欢
  • 1970-01-01
  • 2023-03-09
  • 2010-11-26
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 2021-08-12
  • 2016-10-01
  • 2018-01-09
相关资源
最近更新 更多