Vérifier si l'élément est dans la liste (contient)

j'ai une liste d'éléments, disons, entiers et je veux vérifier si ma variable (un autre entier) est l'un des éléments de la liste. En python je ferais:

my_list = [1,2,3,4] # elements
my_var = 3 # my variable
my_var in my_list # returns boolean

Comment faire en C++? J'ai pensé à utiliser std::list , mais je ne trouve pas de méthode find . Je peux voir une telle méthode dans la structure std::set .

plus profondément, le problème est que mon programme est donné des identifiants uniques (une liste, un ensemble, quoi que ce soit) et je itère sur une longue liste de données d'entrée (ids) et vérifiez si elles sont incluses dans la liste (valeur booléenne retournée pour chaque étape d'itération). Et je ne sais pas comment faire ça en C++.

25
demandé sur GG. 2014-06-10 15:05:45

5 réponses

vous pouvez utiliser std::find

bool found = (std::find(my_list.begin(), my_list.end(), my_var) != my_list.end());

Vous devez inclure <algorithm> . Il devrait fonctionner sur des conteneurs standard, des listes de vecteurs, etc...

45
répondu Matzi 2017-09-09 08:48:33

std::list ne fournit pas de méthode de recherche. Vous pouvez itérer sur la liste et vérifier si l'élément existe ou utiliser std::find . Mais je pense que pour votre situation std::set est plus préférable. Le premier prendra O(n) temps mais plus tard prendra O(lg(n)) temps de chercher.

vous pouvez simplement utiliser:

if(mySet.find(myVar) != mySet.end()){
      //do whatever
}
13
répondu Rakib 2014-06-10 13:45:20

vous devez #include <algorithm> , alors vous pouvez utiliser std:: find

3
répondu Radu Chivu 2014-06-10 11:07:48

Utiliser std::find , quelque chose comme:

if (std::find(std::begin(my_list), std::end(my_list), my_var) != std::end(my_list))
    // my_list has my_var
1
répondu Paul Evans 2014-06-10 11:10:05

ils devraient vraiment ajouter un emballage. Comme ceci:

namespace std
{
    template<class _container,
        class _Ty> inline
        bool contains(_container _C, const _Ty& _Val)
        {return std::find(_C.begin(), _C.end(), _Val) != _C.end(); }
};
...
    if( std::contains(my_container, what_to_find) )
    {

    }
0
répondu KungPhoo 2018-06-11 16:23:21