如何找到没有重复的不同两个向量集

How to find different set of two vectors with no repetitions?

本文关键字:两个 向量 何找      更新时间:2023-10-16

我正在编写代码以返回不在向量v2 v1中的数据,并且没有使用C++重复。

std::set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), 
                        std::inserter(diff, diff.begin()));

但是,当我的输入 v1,v2 是

v1=[137   138   139   140   141   142   143   144   148   150   157   158   161]
v2=[138   157   150   140   137   158   141   139   143   148]

输出导致意外解决方案,如

diff=[   137   139   140   141   142   143   144   148   150   161]

虽然,我预期的解决方案必须是

diff=[  142   144   161]

我应该如何纠正我的功能?谢谢

v2 需要排序。 v1 也是如此(确实如此)。该函数set_difference假定两个向量都已排序。

该算法只需要遍历每个向量一次,只需要比较每个向量的当前光标。 这是一个显着的性能改进,并且与使用任意输入的算法相比节省了空间。

std::set_difference:

从排序区域 [first1, last1) 复制元素,这些元素是在排序范围 [first2, last2) 到范围开头的位置中找不到在d_first

http://en.cppreference.com/w/cpp/algorithm/set_difference

在对向量进行

区分之前,您必须对向量进行排序

看方法:

std::set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), 
                        std::inserter(diff, diff.begin()));

它被称为set_difference是有原因的:)

只需使用set容器而不是vector容器即可。他们将确保您的数据已排序并且算法成功。