Un recente discorso unordered_map
in C ++ mi ha fatto capire che dovrei usare unordered_map
per la maggior parte dei casi in cui ho usato map
prima, a causa dell'efficienza della ricerca ( O ammortizzato (1) vs. O (log n) ). La maggior parte delle volte che utilizzo una mappa, utilizzo int
ostd::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::map
over a std::unordered_map
nel 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::map
sopra std::unordered_map
in caso di tipi semplici come int
e 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.