Diciamo che ho un map<int, int>
:vale forse la pena pagare per i tipi di base?
std::map<int, int> map;
map.emplace(1, 2);
map.insert({3, 4});
Ci sarà qualche differenza tra le due chiamate?
Nella prima chiamata, i due numeri interi verranno copiati per valore nella funzione emplace
e quindi di nuovo nel costruttore std::pair<int, int>
. Nella seconda chiamata, i due numeri interi verranno copiati in base al valore per il costruttore std::pair<int, int>
e quindi copiati di valore per lo std::pair<int, int>
interno come membri della prima coppia.
Capisco i vantaggi di emplace per tipi come std::string
in cui verrebbero copiati in base al valore nella seconda chiamata e spostati completamente nella prima, ma c'è qualche vantaggio nell'utilizzo di emplace
nella situazione descritta?