【问题标题】:c++ find different elements from two vectors using set_intersection?c ++使用set_intersection从两个向量中找到不同的元素?
【发布时间】:2021-09-14 23:25:13
【问题描述】:

所以我得到了 2 个向量。我想从两个向量中找到不同的元素。 示例:

2 5 4 6

2 4 3

输出将是 5 3 6 -> 仅出现在其中一个向量中的数字。 这是我迄今为止的尝试:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

std::vector<int> intersection(std::vector<int> &v1,
                                      std::vector<int> &v2){
   std::vector<int> v3;

   std::sort(v1.begin(), v1.end());
   std::sort(v2.begin(), v2.end());

   std::set_intersection(v1.begin(),v1.end(),
                         v2.begin(),v2.end(),
                         back_inserter(v3));
   return v3;
}

int main(){
    int a,b;
    int digit = 0;
    vector<int> v1;
    vector<int> v2;
    cin >> a >> b;
   
    for ( int i = 0; i < a; i++ ){ 
       cin >> digit;
       v1.push_back( digit );
    }
    for ( int i = 0; i < b; i++ ){ 
       cin >> digit;
       v2.push_back( digit );
    }
    auto res = intersection(v1, v2);
   
    for(int n : res)
       std::cout << n << ' ';
    }

    return 0;
}

这当前返回来自这些向量的公共元素。有没有办法扭转这种情况并返回不常见的元素?

【问题讨论】:

标签: c++ algorithm vector intersection


【解决方案1】:

感谢@Blastfurnace

如下使用std::set_symmetric_difference

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

int main()
{
    std::vector<int> v1{2,5,4,6};
    std::vector<int> v2{2,4,3};
    
    std::sort(v1.begin(), v1.end());
    std::sort(v2.begin(), v2.end());

    std::vector<int> v_symDifference;

    std::set_symmetric_difference(
        v1.begin(), v1.end(),
        v2.begin(), v2.end(),
        std::back_inserter(v_symDifference));

    for(int n : v_symDifference)
        std::cout << n << ' ';
}

输出:

3 5 6 

【讨论】:

  • 为什么要 std::sort() 输入向量?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-07
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多