Если я попробую приведенный ниже код, он сохранит адрес как ключ, а не значение, поэтому «один и тот же ключ сохраняется дважды»
static map<const char *, int> lMap;
const char * msg = "hhhhh";
char *buf = (char *) malloc(6);
strcpy(buf, msg);
lMap.insert(make_pair(buf, 85));
buf = (char *) calloc(5, sizeof (char));
strcpy(buf, msg);
lMap.insert(make_pair(msg, 85));
cout << "size: " << lMap.size() << endl;
map<const char *, int>::const_iterator it2;
for (it2 = lMap.begin(); it2 != lMap.end(); ++it2) {
cout << it2->first << " | " << it2->second << endl;
}
распечатанный результат:
size: 2
hhhhh | 85
hhhhh | 85
std::string
? - person NathanOliver   schedule 27.06.2016"hhhhh"
? Включая терминатор? - person Some programmer dude   schedule 27.06.2016malloc
не имеет к делу никакого отношения. Ваши ключи являются указателями. Подумайте, что значит сравнивать указатели. - person juanchopanza   schedule 27.06.2016std::string
, совершенно иная и требует нового и другого вопроса. - person Some programmer dude   schedule 27.06.2016