una resueltos listas lista insertar fuente estatica enlazadas elementos ejercicios con codigo archivos c++ contains

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 }