I creen insertar() no sobrescribir un valor existente, y el resultado de la operación se puede comprobar mediante el ensayo del valor bool en el valor iterador/pair regresaron
La asignación al operador subíndice [] simplemente sobrescribe lo que está allí (insertando una entrada si ya no hay ninguna)
Cualquiera de los operadores de inserción y [] puede causar problemas si no está esperando ese comportamiento y no lo acomoda.
por ejemplo, con inserción:
std::map< int, std::string* > intMap;
std::string* s1 = new std::string;
std::string* s2 = new std::string;
intMap.insert(std::make_pair(100, s1)); // inserted
intMap.insert(std::make_pair(100, s2)); // fails, s2 not in map, could leak if not tidied up
y con el operador []:
std::map< int, std::string* > intMap;
std::string* s1 = new std::string;
std::string* s2 = new std::string;
intMap[ 100 ] = s1; // inserted
intMap[ 100 ] = s2; // inserted, s1 now dropped from map, could leak if not tidied up
creo que esas son correctos, pero no los han recopilado, por lo que puede tener errores de sintaxis
El primero es mucho más legible;) – schnaader
El uso de make_pair() ayudaría en la inserción porque puede deducir los tipos de argumento: "some_map.insert (std :: make_pair (" x ", 500));" –
@Fred Larson: aunque el 'make_pair' que se muestra deduciría' const char * 'y' int', por lo que se generará una conversión implícita de un 'par' al real' value_type' del 'map'. –