Jak powiedział Dewfy, na przykładzie dałeś, to nie ma znaczenia, ponieważ int jest wbudowany w typie i zostanie skopiowane przez wartość, ale z char * to trochę inaczej ...
Jeśli miał
std::map<char *, int> map;
Wtedy nie można wstawić zmienne zadeklarowane jako const char * zawiedzie
char * y = new char[4];
const char * x = "asdf";
std::map<char *, int> map;
map.insert(make_pair(y, 4)); //ok
map.insert(make_pair(x, 4)); //fail
z
std::map<char*, int> map;
rzeczywiście można powiedzieć
char * x = new char[1];
(*x) = 'a';
map<char*,int>::iterator it = map.begin();
cout<<it->first; //prints 'a'
(it->first)[0] = 'x'
cout<<it->first; //prints 'x'
z
std::map<const char *, int>
będziesz ograniczony do korzystania
map<const char*, int>::iterator
Pierwsza odpowiedź, która faktycznie odpowiada na pytanie. –