programacion - ¿Cómo se itera a través de un conjunto desordenado en C++?
ciclos en programacion pdf (3)
Al igual que cualquier otra colección:
for (auto i = my_set.begin(); i != my_set.end(); ++i) {
std::cout << (*i) << std::endl;
}
O de una forma un poco más genérica utilizando las sobrecargas de las funciones de begin
y end
(puede escribir sobrecargas para sus propios tipos; también funcionan en matrices simples):
for (auto i = begin(my_set); i != end(my_set); ++i) {
...
}
Supongamos que tengo un conjunto desordenado
unordered_set<int> my_set;
myset.insert(1);
myset.insert(2);
myset.insert(3);
¿Cómo itero a través de él? No necesito repetir en ningún orden, siempre y cuando alcance cada elemento una vez. Lo intenté
for (int i = 0; i < my_set.size(); i++)
cout << my_set[i];
en vano.
Nunca los he usado hasta ahora, pero creo que puedes usar un iterador de la misma manera que lo haces con std::set
:
for(unordered_set<int>::iterator a = my_set.begin(); a != my_set.end(); ++a) {
int some_int = *a;
}
Puedes usar el nuevo bucle for de rango:
std::unordered_set<T> mySet;
for (const auto& elem: mySet) {
/* ... process elem ... */
}
O bien, puede utilizar el bucle basado en iterador más tradicional:
std::unordered_set<T> mySet;
for (auto itr = mySet.begin(); itr != mySet.end(); ++itr) {
/* ... process *itr ... */
}
O, si no tiene soporte auto
, quizás porque no tiene soporte para C ++ 11 en su compilador:
std::unordered_set<T> mySet;
for (std::unordered_set<T>::iterator itr = mySet.begin(); itr != mySet.end(); ++itr) {
/* ... process *itr ... */
}
¡Espero que esto ayude!