Suponiendo que estamos usando C++ 11 o posterior, el mejor enfoque es probablemente:
object * myObject = // get an object somehow
myMap.emplace({1,2}, myObject);
Para mapas, emplace
puede ser pensado como una versión de insert
que toma la clave y el valor como algo separado argumentos (en realidad puede tomar cualquier combinación de argumentos que puedan tomar los constructores del tipo pair
correspondientes). Además de ser sintácticamente más limpio, también es potencialmente más eficiente que make_pair
, porque make_pair
generalmente producirá una salida cuyo tipo no coincide exactamente con el value_type
del contenedor, por lo que incurre en una conversión de tipo innecesaria.
Solía recomendar este, que también sólo funciona en C++ 11 o posterior:
object * myObject = // get an object somehow
myMap.insert({{1,2}, myObject});
Esto evita el uso de un poco sorprendente emplace
, pero que antes no funcionaba si la clave o el valor tipo son de solo movimiento (por ejemplo, unique_ptr
). Eso se ha corregido en el estándar, pero la implementación de su biblioteca estándar puede no haber resuelto la corrección todavía. En teoría, esto también podría ser ligeramente menos eficiente, pero de una manera que cualquier compilador medio decente puede optimizar fácilmente.
¿Qué código ha intentado? – Mark