Why am I not allowed to read an object from a constant unordered_map?
const unordered_map z;
int val = z[5]; // compile error
As Jonathan already said, the operator[]
method is non-const because it might add a default value when the item being looked up is not found.
On the other hand, as highlighted from Benjamin in a comment, the at()
method is available for const as well.
const unordered_map z;
int val = z.at(5); // Success!
The downside is that when the value being looked up is not in the map, a std::out_of_range
exception is raised, so it has to be managed.