如何找到不重复的两个向量的不同集合? < >我编写代码返回数据在 V1 中,而不是在代码> V2< /Cube >向量中,没有重复使用C++。 std::set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), std::inserter(diff, diff.begin()));

如何找到不重复的两个向量的不同集合? < >我编写代码返回数据在 V1 中,而不是在代码> V2< /Cube >向量中,没有重复使用C++。 std::set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), std::inserter(diff, diff.begin()));,c++,vector,C++,Vector,但是,当我的输入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] 然而,我预

但是,当我的输入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(v1.begin(), v1.end(), v2.begin(), v2.end(), 
                        std::inserter(diff, diff.begin()));
它被称为
set\u difference
,原因如下:)

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

std::set_difference:

复制排序范围[first1,last1]中的元素,这些元素是 在排序范围[first2,last2]到范围开始处未找到 首先是迪乌


如果您阅读,则必须先对向量进行排序,然后再对其进行差分

,例如,您将看到它“将排序范围[first1,last1]中未在排序范围[first2,last2]中找到的元素复制到从d_first开始的范围”。这正是它所做的。请注意我添加的重点,关于两个范围内的数据排序。那么,我应该如何实现我的预期结果。我知道MATLAB中的一些函数,如
set_diff
可以实现我的预期结果。请确保两个向量都是。该算法假设两个序列都已排序。您的示例数据不正确我们不能满足这个前提条件。