Como dijo Dewfy, con el ejemplo que diste, no importa desde un int se construyó en tipo y será copiado por valor, pero con char * es un poco diferente ...
Si tuviera
std::map<char *, int> map;
Entonces no se puede insertar una variable declarada como const char * fallará
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
con un
std::map<char*, int> map;
en realidad se puede decir
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'
con un
std::map<const char *, int>
se le restringido a usar
map<const char*, int>::iterator
La primera respuesta que realmente responde a la pregunta. –