Sie verwenden C++ 11 oder höher Unter der Annahme, ist der beste Ansatz:
object * myObject = // get an object somehow
myMap.emplace({1,2}, myObject);
Für Karten, emplace
kann als eine Version von insert
gedacht werden, die den Schlüssel und den Wert als separate nimmt Argumente (es kann tatsächlich jede Kombination von Argumenten annehmen, die die entsprechenden Konstruktoren des Typs pair
annehmen können). Abgesehen davon, dass es syntaktisch sauberer ist, ist es auch potentiell effizienter als make_pair
, weil make_pair
normalerweise eine Ausgabe erzeugt, deren Typ nicht exakt mit der des Containers übereinstimmt, und so eine unnötige Typumwandlung eingeht.
ich verwenden, um dies zu empfehlen, die auch nur C++ 11 arbeitet in oder später:
object * myObject = // get an object somehow
myMap.insert({{1,2}, myObject});
Das den etwas überraschenden Einsatz von emplace
vermeidet, aber es hat früher nicht, wenn der Schlüssel oder Wert arbeiten Typ ist nur Bewegung (zB unique_ptr
). Das wurde im Standard behoben, aber die Standard-Bibliotheksimplementierung hat den Fehler möglicherweise noch nicht behoben. Dies könnte theoretisch auch etwas weniger effizient sein, aber in einer Weise, die jeder halbwegs ordentliche Compiler leicht optimieren kann.
Welchen Code haben Sie ausprobiert? – Mark