c++ - resueltos - listas enlazadas en c insertar elementos
Compruebe si el elemento está en la lista(contiene) (5)
Tengo una lista de elementos, por ejemplo, enteros y quiero verificar si mi variable (otro entero) es uno de los elementos de la lista. En python yo haría:
my_list = [1,2,3,4] # elements
my_var = 3 # my variable
my_var in my_list # returns boolean
¿Cómo hacer eso en C ++? Pensé en usar std::list
, pero no puedo encontrar ningún método de find
en él. Puedo ver este método en la estructura std::set
.
Más profundamente, el problema es que a mi programa se le asignan algunos identificadores únicos (una lista, un conjunto, lo que sea) e itero sobre una larga lista de datos de entrada (identificadores) y compruebo si están incluidos en la lista (valor booleano devuelto para cada paso de iteración). Y no estoy seguro de cómo debo hacer eso en C ++.
Puedes usar std::find
bool found = (std::find(my_list.begin(), my_list.end(), my_var) != my_list.end());
Necesitas incluir <algorithm>
. Debería funcionar en contenedores estándar, listas de vectores, etc ...
Realmente deberían agregar una envoltura. Me gusta esto:
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) )
{
}
Usa std::find
, algo como:
if (std::find(std::begin(my_list), std::end(my_list), my_var) != std::end(my_list))
// my_list has my_var
debe #include <algorithm>
, luego puede usar std::find
std::list
no proporciona un método de búsqueda. Puede iterar sobre la lista y verificar si el elemento existe o usar std::find
. Pero creo que para tu situación std::set
es más preferible. El primero tomará tiempo O(n)
pero luego tomará tiempo O(lg(n))
para buscar.
Simplemente puede utilizar:
if(mySet.find(myVar) != mySet.end()){
//do whatever
}