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++.
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...
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
}
vous devez #include <algorithm>
, alors vous pouvez utiliser std:: find
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
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) )
{
}