在第二个向量中找到向量元素

时间:2009-12-10 18:00:51

标签: c++ stl

给定两个整数向量,如何确定第一个向量中是否存在某些元素?

3 个答案:

答案 0 :(得分:9)

我想这样的事情应该有效:

std::vector<int> v1,v2;
if(std::find_first_of(v2.begin(),v2.end(),v1.begin(),v1.end()) != v2.end())
   std::cout << "found!\n";

答案 1 :(得分:4)

你可以取两个向量的set_intersection,然后检查结果交集是否为空:

std::sort(v1.begin(), v1.end());
std::sort(v2.begin(), v2.end());
std::set_intersection(v1.begin()
  , v1.end()
  , v2.begin()
  , v2.end()
  , std::back_inserter(v3));
bool containsElements = !v3.empty();

set_intersection可以在#include <algorithm>

中找到

要使set_intersection起作用,必须先对两个向量进行排序。

答案 2 :(得分:0)

我认为是这样的:

bool contains(const std::vector<int>& vec, int val){
    for(std::vector<int>::const_iterator it=vec.begin(); it!=vec.end(); ++it){
        if(*it==val){
            return true;
        }
    }
    return false;
}

bool contains(const std::vector<int>& from, const std::vector<int>& in){
    for(std::vector<int>::const_iterator it=from.begin(); it!=from.end(); ++it){
        if(contains(in, *it)){
            return true;
        }
    }
    return false;
}

// Example
std::vector<int> a;
std::vector<int> b;

a.push_back(2);
a.push_back(1);
b.push_back(0);
b.push_back(1);

bool contains = contains(a, b);