si Supponendo che sta utilizzando C++ 11 o successivo, l'approccio migliore è probabilmente:
object * myObject = // get an object somehow
myMap.emplace({1,2}, myObject);
Per le mappe, emplace
può essere pensato come una versione di insert
che prende la chiave e il valore come separato argomenti (può effettivamente prendere qualsiasi combinazione di argomenti che i costruttori del tipo pair
corrispondente possano prendere). Oltre ad essere sintatticamente più pulito, è anche potenzialmente più efficiente di make_pair
, poiché lo standard make_pair
di solito produce un'uscita il cui tipo non corrisponde esattamente allo value_type
del contenitore e pertanto incorre in una conversione di tipo non necessaria.
ho usato per consigliare questo, che anche funziona solo in C++ 11 o versioni successive:
object * myObject = // get an object somehow
myMap.insert({{1,2}, myObject});
questo modo si evita l'uso un po 'sorprendente di emplace
, ma in passato non ha funzionato se la chiave o il valore il tipo è solo di spostamento (es. unique_ptr
). Questo è stato corretto nello standard, ma l'implementazione della libreria standard potrebbe non aver ancora risolto la correzione. Questo potrebbe anche teoricamente essere leggermente meno efficiente, ma in un modo che qualsiasi compilatore a metà strada decente può facilmente ottimizzare.
fonte
2013-11-13 00:26:59
Che codice hai provato? – Mark