我正在编写代码以返回v1
中不在v2
向量中的数据,而不使用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]
我应该如何纠正我的功能?感谢
答案 0 :(得分:1)
需要对v2进行排序。和v1一样(它是)。函数set_difference
假设两个向量都已排序。
算法只需要遍历每个向量一次,只需要比较每个向量的当前光标。这是一项显着的性能改进,并且可以节省空间,使用任意输入的算法。
答案 1 :(得分:1)
的std :: set_difference:
复制排序范围[first1,last1]中的元素 在排序范围[first2,last2]中找不到范围的开头 在d_first
你必须先对你的矢量进行排序,然后才能区分它们
答案 2 :(得分:0)
看看方法:
std::set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(),
std::inserter(diff, diff.begin()));
它被称为set_difference
,原因是:)
只需使用set
个容器而不是vector
个容器。他们将确保您的数据已排序并且算法成功。