web-dev-qa-db-fra.com

En C ++, vérifiez si std :: vector <string> contient une certaine valeur

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?
62
Jame

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>.

151
Darhuuk
  1. 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()) { ...
    
  2. Si votre vecteur est maintenu trié, utilisez std::binary_search , il offre également une complexité logarithmique.

  3. Si tout échoue, retombe à std::find , qui est une recherche linéaire simple.

29
Alex B

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...";
14
colddie

c'est dedans <algorithm> et appelé std::find.

5
Nim
4