Warum darf ich ein Objekt nicht von einer konstanten unordered_map lesen?Leseobjekt von const unordered_map
const unordered_map<int, int> z;
int val = z[5]; // compile error
Der Fehler unter Klirren ist die folgende:
error: no viable overloaded operator[] for type 'const
unordered_map<int, int>'
int val = z[5];
Anbetracht dessen, dass der entsprechende Code ein const vector
funktioniert Ich bin ein wenig verwirrt, warum wir dieses Verhalten mit zu bekommen.
Um ein wenig weniger wortreich zu sein, können Sie auch 'int val = z.at (5);' verwenden - In diesem Fall erhalten Sie eine 'std :: out_of_range' Ausnahme, wenn der Schlüssel nicht ist in der Karte. Natürlich ist es nicht weniger ausführlich, wenn Sie es in einem Try-Catch-Block umgeben. –
Ah ja, ich habe dieses Verhalten der Karte vergessen - ich finde es ziemlich überraschend, dass das Nachschlagen eines Schlüssels den Standardwert in die Karte einfügen kann, aber das erklärt, obwohl es keine konstante Elementfunktion ist. Wird es in 2 Minuten akzeptieren :) (und ja @Benjamin 'at' ist sowieso die beste Wahl für mich im Code, denn es wäre ein schwerer Fehler, den Wert zu diesem Zeitpunkt nicht zu finden). – Voo
@Voo: Es mag auf den ersten Blick überraschend sein, aber es wird sofort klar, dass sonst nichts wirklich Sinn macht. –