Existe-t-il une fonction intégrée qui me dit que mon vecteur contient un certain élément ou non, par ex.
std::vector<string> v;
v.Push_back("abc");
v.Push_back("xyz");
if (v.contains("abc")) // I am looking for one such feature, is there any
// such function or i need to loop through whole vector?
Vous pouvez utiliser std::find
comme suit:
if (std::find(v.begin(), v.end(), "abc") != v.end())
{
// Element in vector.
}
Pour pouvoir utiliser std::find
: include <algorithm>
.
Si votre conteneur ne contient que des valeurs uniques, envisagez d'utiliser std::set
à la place. Il permet d'interroger des membres avec une complexité logarithmique.
std::set<std::string> s;
s.insert("abc");
s.insert("xyz");
if (s.find("abc") != s.end()) { ...
Si votre vecteur est maintenu trié, utilisez std::binary_search
, il offre également une complexité logarithmique.
Si tout échoue, retombe à std::find
, qui est une recherche linéaire simple.
En C++ 11, vous pouvez utiliser std::any_of
au lieu.
Un exemple pour savoir s'il y a des zéros dans le tableau:
std::array<int,3> foo = {0,1,-1};
if ( std::any_of(foo.begin(), foo.end(), [](int i){return i==0;}) )
std::cout << "zero found...";
c'est dedans <algorithm>
et appelé std::find
.