Étant donné deux vecteurs d'entiers, comment déterminer s'il y a un élément du 1er vecteur est présent dans le 2ème?Trouver l'élément vectoriel dans le second vecteur
Répondre
Je suppose que quelque chose comme cela devrait fonctionner:
std::vector<int> v1,v2;
if(std::find_first_of(v2.begin(),v2.end(),v1.begin(),v1.end()) != v2.end())
std::cout << "found!\n";
c'est exactement ce que je recherche – dimba
Bien que cela puisse paraître pire en complexité 'O (v1.size() * v2.size())', cela n'a pas vraiment d'importance sur les petits ensembles, et vous ne le faites pas avoir à modifier (trier) vos vecteurs au préalable. –
Vous pouvez prendre la set_intersection des deux vecteurs, puis vérifier si l'intersection résultante est vide:
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
se trouvent dans #include <algorithm>
Pour set_intersection
à travailler, les deux vecteurs doivent d'abord être trié.
Il est à noter que v1 et v2 doivent être triés pour que cela fonctionne. –
Il convient de noter que vous devriez préférer 'v3.empty()' à 'v3.size() == 0'. –
@Charles Bailey et @Matthie M.: J'ai ajouté les deux, merci. –
Je pense que quelque chose comme ceci:
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);
Sont-ils triés, peuvent-ils être classés en place ou doivent-ils rester dans leur courant commande? –
Est-ce que ce sont les devoirs? Si c'est le cas, il devrait être étiqueté comme tel. – Andres
avez-vous des contraintes de complexité? – philsquared