Un recente discorso unordered_mapin C ++ mi ha fatto capire che dovrei usare unordered_mapper la maggior parte dei casi in cui ho usato mapprima, a causa dell'efficienza della ricerca ( O ammortizzato (1) vs. O (log n) ). La maggior parte delle volte che utilizzo una mappa, utilizzo intostd::string come chiave; quindi, non ho problemi con la definizione della funzione hash. Più ci pensavo, più mi rendevo conto che non riesco a trovare alcun motivo per usare un std::mapover a std::unordered_mapnel caso di chiavi con tipi semplici: ho dato un'occhiata alle interfacce e non ho trovato differenze significative che potrebbero influire sul mio codice.
Di qui la domanda: c'è una vera ragione per usare std::mapsopra std::unordered_mapin caso di tipi semplici come inte std::string?
Lo sto chiedendo da un punto di vista strettamente programmatico: so che non è completamente considerato standard e che potrebbe creare problemi con il porting.
Inoltre, mi aspetto che una delle risposte corrette potrebbe essere "è più efficiente per insiemi di dati più piccoli" a causa di un sovraccarico minore (è vero?) - quindi vorrei limitare la domanda ai casi in cui la quantità di keys non è banale (> 1 024).
Modifica: duh, ho dimenticato l'ovvio (grazie GMan!) - Sì, le mappe sono ordinate ovviamente - Lo so, e sto cercando altri motivi.

