Le moyen le plus efficace pour affecter des valeurs à des cartes

Qui pour affecter des valeurs à une carte qui est le plus efficace? Ou sont-ils tous optimisés pour le même code (sur la plupart des les compilateurs modernes)?

   //1) Assignment using array index notation
   Foo["Bar"] = 12345;

   //2) Assignment using member function insert() and STL pair
   Foo.insert(std::pair<string,int>("Bar", 12345));

   //3) Assignment using member function insert() and "value_type()"
   Foo.insert(map<string,int>::value_type("Bar", 12345));

   //4) Assignment using member function insert() and "make_pair()"
   Foo.insert(std::make_pair("Bar", 12345));

(Je sais que je pourrais indice de référence et de vérifier la sortie du compilateur, mais cette question se pose maintenant et la seule chose que j'ai à portée de main est mon téléphone portable... hehe)

Je serais prêt à parier sur they are all the same. Je pourrais expliquer pourquoi l'un serait plus rapide que les autres, mais ce serait seulement si nous ignorons les optimisations du compilateur.
en fait, 4) œuvres, std::pair<std::string, int> p = std::make_pair("Bar", 12345); parce que le constructeur de pair est permissive de cette façon (aussi longtemps que les types peuvent être convertis, cela fonctionne).

OriginalL'auteur inquam | 2013-01-08