En supposant que vous utilisiez C++11 ou une version ultérieure, la meilleure approche est probablement :
object * myObject = // get an object somehow
myMap.emplace({1,2}, myObject);
Pour les cartes, emplace
peut être considéré comme une version de insert
qui prend la clé et la valeur comme arguments séparés (il peut en fait prendre n'importe quelle combinaison d'arguments que la fonction pair
peuvent prendre). En plus d'être syntaxiquement plus propre, cette méthode est aussi potentiellement plus efficace que la méthode make_pair
porque make_pair
produira généralement un résultat dont le type ne correspond pas exactement à l'option value_type
du conteneur, ce qui entraîne une conversion de type inutile.
J'avais l'habitude de recommander cette méthode, qui ne fonctionne également qu'avec C++11 ou une version plus récente :
object * myObject = // get an object somehow
myMap.insert({{1,2}, myObject});
Cela permet d'éviter l'utilisation un peu surprenante de emplace
mais cela ne fonctionnait pas auparavant si le type de clé ou de valeur était de type "move-only" (par ex. unique_ptr
). Ce problème a été corrigé dans la norme, mais il se peut que l'implémentation de votre bibliothèque standard n'ait pas encore pris en compte cette correction. En théorie, cela pourrait aussi être légèrement moins efficace, mais d'une manière que n'importe quel compilateur à peu près décent peut facilement optimiser.