Perché non mi è permesso di leggere un oggetto da un unordered_map costante?lettura da unordered_map const
const unordered_map<int, int> z;
int val = z[5]; // compile error
L'errore sotto clang è il seguente:
error: no viable overloaded operator[] for type 'const
unordered_map<int, int>'
int val = z[5];
Considerando che il codice equivalente utilizzando un const vector
funziona bene io sono un po 'confuso perché riusciamo ad ottenere questo comportamento.
Per essere un po 'meno prolisso, puoi anche usare 'int val = z.at (5);' - In tal caso, otterrai un'eccezione 'std :: out_of_range' se la chiave non è nella mappa Naturalmente, non è meno dettagliato se lo si circonda in un blocco try-catch. –
Ah sì, ho dimenticato questo comportamento della mappa - Trovo abbastanza sorprendente che la ricerca di una chiave possa inserire il valore predefinito nella mappa, ma ciò spiega mentre non è una funzione membro const. Lo accetterò in 2 minuti :) (e sì @Benjamin 'at' è comunque la scelta migliore per me nel codice, perché non trovando il valore a questo punto sarebbe un errore grave). – Voo
@Voo: Può sembrare sorprendente a prima vista, ma diventa immediatamente chiaro che nient'altro ha davvero senso. –