-, * l. lvalue C , () (). ++ - lvalues. , , * lvalue. lvalue, , .. &*i, &i->first &i->second ( , &).
-, , l. , lvalue . , lvalue. , , value_type std::map. , const-, . , . , .
, lvalue. lvalue , . lvalue.
As for your assumption about saving elements std::map, I would say that in a typical implementation they will be stored as objects pair<const K, V>, that is, exactly what the dereference operator evaluates. As a rule, the card does not need to change the key part of the pair after its initialization, therefore, it should not encounter any problems with the fact that the first member of the pair is const-qualified.
source
share