Если я пытаюсь ниже код, он сохраняет адрес в качестве ключа, а не значения, поэтому «тот же ключ хранится в два раза»Как выделить карту с помощью malloc?
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'? – NathanOliver
Сколько символов является строкой '' hhhhh''? *** Включая *** терминатор? –
'malloc' не имеет ничего общего с проблемой. Ваши ключи - указатели. Подумайте, что значит сравнивать указатели. – juanchopanza