map не индексируется через char[]
должно выводить 10, но выводит 0
#include <iostream>
using namespace std;
#include <map>
map<const char*,int>m;
int main()
{
char text[]="test";
m.emplace((const char*)text,10);
cout<<m["test"];
return 0;
}
Ответы (2 шт):
Автор решения: Harry
→ Ссылка
Готового нет, но его несложно и написать...
auto comp = [](const char* a, const char*b){ return strcmp(a,b) < 0; };
map<const char*,int,decltype(comp)> m{ comp };
int main()
{
char text[]="test";
m.emplace((const char*)text,10);
cout<<m["test"];
return 0;
}
Только учтите, что раз в map вносится только указатель, то он должен быть действителен, пока существует ваш map...
Автор решения: AR Hovsepyan
→ Ссылка
Вы устанавливаете в map пару, с ключом указатель. Напишем ваш код подробно.
//нет необходдимости явного приведения, но все же
const char* temp1 = (const char*)text;
m.emplace(temp1, 10);
То есть вы намеренно создаете указатель, и он является ключом при установке, а при поиске _ другой указатель, и не важно что массивы строк одинаковы. Точно так же, если вы установите указатель на временный массив, то указатель text не будет ключом этого элемента.
m.emplace("test", 10);
cout << m[text]; //добавлен новый элемент
Ищите то, что установлено:
m.emplace(text, 10);
cout << m[text];
или
m.emplace("test", 10);
cout << m["test"];