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"];   
→ Ссылка