unordered_map example c++ iterator unordered-map

example - unordered_map c++



¿Cómo eliminar varios elementos de un mapa desordenado mientras se itera sobre él? (3)

Por favor considere la siguiente situación:

using namespace std; unordered_map<int, vector<A>> elements;

Ahora estoy iterando sobre este mapa desordenado:

for (auto it = elements.begin(); it != elements.end(); ++it)

Dentro del bucle, estoy formando grupos a partir de varios elementos de elements (el actual al que apunta y algunos más, ¡no necesariamente los siguientes en la línea!). Debido a que cada elemento puede ser solo parte de un clúster, me gustaría eliminarlos del mapa y luego continuar con el siguiente elemento (es decir, construir el siguiente clúster).

¿Cómo puedo hacer esto y continuar la iteración en la posición correcta?


La función de unordered_map::erase devuelve el iterador después del elemento eliminado (todas las funciones de erase colecciones lo hacen). Puedes usar eso para continuar.

Solo recuerde no aumentar el iterador en el caso cuando borre un elemento, o pasará por encima de un elemento.


unordered_map::erase devolverá el iterador más allá del elemento eliminado.

Usted querría código a lo largo de las líneas de:

it = myMap.erase( it );

Nota importante: si está haciendo esto dentro de un bucle, querrá asegurarse de evitar el incremento típico al final del bucle si se hace esto.


for (auto it = elements.begin(); it != elements.end();) { if(you have to rease) { it = elements.erase(it); } else it++; }

De esta manera, te aseguras de no incrementar después de borrar y, al mismo tiempo, no incrementas el final ().

Después de sugerencias que no hay una buena razón para tener un bucle que no incremente nada, es posible que desee un bucle while en su lugar. Principalmente para una mayor legibilidad.