2009-12-10 3 views
0

Учитывая два вектора целых чисел, как определить, есть ли какой-либо элемент из 1-го вектора во втором?Найти векторный элемент во втором векторе

+0

ли они сортируются, они могут быть отсортированы в месте, или они должны оставаться в своем течении заказ? –

+0

Это домашнее задание? Если это так, он должен быть помечен как таковой. – Andres

+0

У вас есть сложности? – philsquared

ответ

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"; 
+0

это именно то, что я ищу – dimba

+1

Хотя это может выглядеть хуже по сложности 'O (v1.size() * v2.size())', это не имеет большого значения на небольших наборах, и вы не должны заранее (сортировать) ваши векторы. –

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 работать оба вектора должны быть сначала отсортирован.

+3

Стоит отметить, что v1 и v2 должны быть отсортированы для этого. –

+2

Стоит отметить, что вы должны предпочесть 'v3.empty()' to 'v3.size() == 0'. –

+0

@Charles Bailey и @Matthie M .: Я добавил оба из них, спасибо. –

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); 
+0

Это означает, что он написан вручную для in for. Я ищу решение для STL-метода – dimba

+0

Я прочитал ваше мнение за пост после того, как я его разместил: P – VDVLeon

Смежные вопросы