Utilicé std :: map en STL. ¿Puedo usar el iterador después de que otro elemento se haya insertado en el mapa? ¿Sigue siendo válido?¿La inserción al mapa STL invalida otro iterador existente?
Respuesta
En caso de duda en cuanto a la semántica de una operación en un contenedor, consulte the documentation:
mapa tiene la importante propiedad de que la inserción de un nuevo elemento en una
map
no invalida iteradores que apuntan a elementos existentes.Borrar un elemento de un
map
tampoco invalida ningún iterador, excepto, por supuesto, para los iteradores que realmente apuntan al elemento que se está borrando.
Esto se toma de la documentación de SGI STL. Si bien esta documentación técnicamente no especifica el comportamiento de los contenedores de la Biblioteca Estándar de C++, las diferencias son generalmente insignificantes, aparte de las partes de la STL que no son parte de la Biblioteca Estándar de C++, por supuesto.
La documentación de SGI STL es una referencia indispensable, especialmente si no tiene una copia del estándar de C++.
Insertar en std :: map no invalida los iteradores existentes.
De norma 23.1.2/8
Los miembros de inserción no afectará a la validez de iteradores y referencias al contenedor, y los miembros de borrado invalidará sólo iteradores y las referencias al borrado elementos.
- 1. STL rendimiento del mapa de inserción: [] vs. inserción
- 2. ¿Rendimiento de acceso del iterador para el mapa STL frente al vector?
- 3. Diferente eficiencia de iterador y const_iterator (STL)
- 4. vector STL frente a borrado de mapa
- 5. ¿Mapa de STL sobre sí mismo?
- 6. Encontrar el propietario de un iterador STL
- 7. ¿El incremento de un iterador de entrada mutable invalida los valores del iterador anterior?
- 8. C++ :: mapa STL borrar un inexistente clave
- 9. ¿Los mapas STL inicializan los tipos primitivos en la inserción?
- 10. ¿Puede un iterador de mapa STL salirse de los límites mediante el incremento?
- 11. Borrar/Eliminar el contenido del mapa (o cualquier otro contenedor STL) mientras lo itera
- 12. C++ Vectores STL: Obtener iterador del índice?
- 13. ¿Hay una estructura en Python similar al mapa C++ STL?
- 14. ¿Referencia al valor del elemento de mapa STL?
- 15. ¿Cómo se establece la igualdad del iterador STL?
- 16. Scala iterador con el mapa y para
- 17. STL envoltorio sin copia alrededor de una matriz existente?
- 18. ¿Invalida la fuente de mosaico MapView?
- 19. Mapa de STL - insertar o actualizar
- 20. ¿Por qué se invalida vector :: iterator en la reasignación?
- 21. std :: list <> :: splice invalida iteradores. ¿Razón fundamental?
- 22. ¿Qué ocurre si incrementa un iterador que es igual al iterador final de un contenedor de STL
- 23. STL Mapa con la costumbre de comparar la función objeto
- 24. Desestructurar un mapa en otro mapa?
- 25. un C++ mapa hash que preserve el orden de inserción
- 26. mapa STL contiene referencias no se compila
- 27. Problema con std :: Mapa :: iterador después de llamar borrado()
- 28. C++ std :: pregunta del mapa sobre la orden del iterador
- 29. ¿Puedo agregar un div ya existente a otro div existente?
- 30. ¿Cómo comprobar si el iterador STL apunta a algo?
+1, los documentos SGI son bastante buenos. La única mejor fuente de información, incluso si es más difícil de leer, es el estándar. Puede comprar su propia copia electrónica del estándar por alrededor de $ 30, o puede descargarla del codeassist de google [aquí] (http://openassist.googlecode.com/files/C%2B%2B%20Standard%20-%20ANSI % 20ISO% 20IEC% 2014882% 202003.pdf) –