Estoy tratando de insertar varias veces esta misma clave en el mapa, pero con diferentes valores. No funciona Sé que el operador [] hace este trabajo, pero mi pregunta es si este comportamiento de inserción es correcto. ¿No debería insertar inserciones()? Me pregunto qué dice el estándar. Desafortunadamente no lo tengo (Estándar para C++) así que no puedo verificarlo.
Gracias por su ayuda.¿Por qué insertar desde std :: map no quiere actualizar? [C++]
Respuesta
Si desea insertar la misma clave con diferentes valores , en su lugar, necesita std::multimap
.
El std::map::insert
no hará nada si la clave ya existe. El std::map::operator[]
sobrescribirá el valor anterior.
Para la referencia STL no necesita el estándar C++ en sí mismo; algo como http://www.cplusplus.com/reference/ también lo hará.
No estoy seguro de entender completamente, pero parece que está sobrescribiendo sus entradas anteriores en el mapa; Un map
solo almacena un valor de por clave.
Más bien, necesitaría usar multi_map
. Esto le permitirá insertar la misma clave con diferentes valores. Usted pierde operator[]
de esta manera, ya que realmente no tendría sentido. (. Al insertar, seguro, pero ese operador también recupera un valor que debería recuperar?)
He aquí un ejemplo (modificado de here):
#include <iostream>
#include <map>
int main(void)
{
std::multimap<std::string, int> m;
m.insert(std::make_pair("a", 1));
m.insert(std::make_pair("b", 2));
m.insert(std::make_pair("c", 3));
m.insert(std::make_pair("a", 4));
m.insert(std::make_pair("b", 5));
m.insert(std::make_pair("a", 6));
std::cout << "Number of elements with key a: " << m.count("a") << endl;
std::cout << "Number of elements with key b: " << m.count("b") << endl;
std::cout << "Number of elements with key c: " << m.count("c") << endl;
std::cout << "Elements in m: " << endl;
for (m::iterator it = m.begin(); it != m.end(); ++it)
{
std::cout << " [" << it->first << ", " << it->second << "]" << endl;
}
}
- 1. Cómo insertar en std :: map?
- 2. Porting std :: map to C?
- 3. C++: Heredar de std :: map
- 4. std :: map ordena por datos?
- 5. C++ std :: map o std :: set - insertar de manera eficiente duplicados
- 6. std :: map insert o std :: map find?
- 7. ¿Por qué JAXB no quiere validar
- 8. std :: vector :: erase() no se quiere mover
- 9. ¿Cómo comprobar si std :: map contiene una clave sin insertar?
- 10. ProgressDialog no quiere actualizar el mensaje
- 11. Persistencia de std :: map en C++
- 12. ¿Es seguro obtener un objeto en std :: map por referencia?
- 13. ¿Por qué Hibernate intenta eliminar cuando intento actualizar/insertar?
- 14. Mapping std :: map to Python
- 15. ¿Por qué no hay std :: stou?
- 16. std :: map :: emplace() falta - ¿bibliotecas desactualizadas?
- 17. Requisitos de tipo para std :: map
- 18. ¿Por qué C++ std :: list :: clear() no llama a destructores?
- 19. usando BOOST_FOREACH con std :: map
- 20. ¿Por qué Libtool no quiere vincularse con una biblioteca estática?
- 21. Por qué java.util.Properties implementa Map <Object, Object> y no Map <String, String>
- 22. ¿Cómo funciona el iterador std :: map?
- 23. Ordenando std :: map por valor antes de la salida & destroy
- 24. std :: map and -fno-implicit-templates
- 25. Usando std :: string como clave para std :: map
- 26. ¿Por qué std :: hash no se definió para std :: weak_ptr en C++ 0x?
- 27. C++ Almacenamiento de referencias a valores en std :: map
- 28. ¿Qué operaciones son seguras para hilos en std :: map?
- 29. PHP MYSQL Insertar/Actualizar
- 30. ¿Alguien puede recomendar un contenedor de reemplazo C++ std :: map?
Gracias. Y porque tengo que tener al menos 15 caracteres estoy escribiendo este texto. –