BЈовић
¿Hay algún iterador estándar que pueda usar para insertar elementos en std::map usando un algoritmo estándar (por ejemplo, std::copy)?
Necesito un contenedor para vincular un objeto a una cadena y pensé en usar std::map. ¿Hay un contenedor mejor? Se me olvidó decir que es necesario ordenar los artículos.
Vaca Efectiva
Creo que lo que busca el OP es std::inserter(mymap, mymap.end())
para que puedas hacer:
std::copy( inp.begin(), inp.end(), std::inserter(mymap, mymap.end()) );
Los tipos de entrada deben ser un tipo de par que tome su mapa; de lo contrario, su algoritmo tendría que ser std::transform
con una función/functor para convertir el tipo de entrada en tal std::pair
.
inserter no es en realidad un iterador sino una función con plantilla que produce un iterador (std::insert_iterator
que es un tipo con plantilla pero el tipo se resuelve automáticamente en la llamada de función).
-
Si el rango de entrada está ordenado, usando
.begin()
para el segundo parámetro debería hacer las cosas más rápido. De lo contrario, realmente no importa. Ver por ejemplo sgi.com/tech/stl/insert_iterator.html .– Karl Knechtel
7 de diciembre de 2010 a las 9:48
Para insertar en std::map
necesitas usar std::make_pair()
.
Por ejemplo:
std::map<int,std::string> Map;
Map.insert(std::make_pair(5,"Hello"));
Prueba algo similar. 🙂
-
Esto no es lo que busca. No está preguntando cómo insertar un elemento en un mapa. Está buscando una forma de insertar elementos en un mapa utilizando uno de los algoritmos STL.
– Naranja cadente
7 de diciembre de 2010 a las 10:19
-
En el momento en que se hizo y respondió esta pregunta, estaba un poco obsesionado con los puntos de reputación aquí, y en realidad sospeché algo sobre Prasoon, que logró obtener 13 votos a favor para respuestas como esta.
– CashCow
19 de diciembre de 2013 a las 12:55
-
No es una respuesta a la pregunta: “¿Hay algún iterador estándar que pueda usar…?”
– dmitri
16 de diciembre de 2016 a las 1:18
Sí, std::copy
puede insertar varios elementos en un mapa, si utiliza un std::insert_iterator
como OutputIterator (use la función auxiliar std::inserter
para crear estos; de esta manera, se puede inferir el tipo de plantilla). Los “elementos” de un std::map son pares clave-valor, que puede crear con std::make_pair
, como ilustra Prasoon. (El tipo real es std::pair<Key, Value>
; de nuevo, la función de ayuda permite la deducción del tipo de plantilla.) Si tiene las claves en una secuencia y los valores en otra, debería poder usar std::transform
para producir una secuencia de pares clave-valor.