Я заметил, что std :: map :: const_iterator пропускает неконстантную ссылку на тип_значения:
#include <map>
#include <stdio.h>
int main (int argc, char *argv[])
{
std::map<int,int> foo = {{1,1},{4,2}};
const auto &m = foo;
const auto &it = foo.find(1);
printf("%d %d\n", it->first, it->second);
int &i = it->second;
i = 3;
auto &one = foo.at(1);
printf("%d %d\n", 1, one);
return 0;
}
output
$ g++ test.cc && ./a.out
1 1
1 3
Ожидается ли это?Зачем?Единственный способ кодифицировать const-защиту std :: map - это обернуть его в другой класс?