如何找到不重复的两个向量的不同集合?

时间:2017-10-09 07:19:15

标签: c++ vector

我正在编写代码以返回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]

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

3 个答案:

答案 0 :(得分:1)

需要对v2进行排序。和v1一样(它是)。函数set_difference假设两个向量都已排序。

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

答案 1 :(得分:1)

的std :: set_difference:

  

复制排序范围[first1,last1]中的元素   在排序范围[first2,last2]中找不到范围的开头   在d_first

     

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

你必须先对你的矢量进行排序,然后才能区分它们

答案 2 :(得分:0)

看看方法:

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

它被称为set_difference,原因是:)

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