Why am I not allowed to read an object from a constant unordered_map?
const unordered_map<int, int> z;
int val = z[5]; // compile error
The error under clang is the following:
error: no viable overloaded operator[] for type 'const
unordered_map<int, int>'
int val = z[5];
Considering that the equivalent code using a const vector works fine I’m somewhat confused why we get this behavior.
The expression
z[5]calls a non-const member function of the map.This is because a map’s
operator[]will insert a new element if the key isn’t found, so obviously it has to be non-const.For a
vectornothing is inserted byoperator[], the element must exist already (or you get undefined behaviour, so the equivalent code would access the 6th element of an empty vector, which is not fine!).To lookup a key without adding it use: