如何找到不重复的两个向量的不同集合? < >我编写代码返回数据在 V1 中,而不是在代码> V2< /Cube >向量中,没有重复使用C++。 std::set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), std::inserter(diff, diff.begin()));
但是,当我的输入v1、v2为如何找到不重复的两个向量的不同集合? < >我编写代码返回数据在 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=[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
可以实现我的预期结果。请确保两个向量都是。该算法假设两个序列都已排序。您的示例数据不正确我们不能满足这个前提条件。