Насколько я понимаю, оператор равенства для CHAR * просто равняет адрес памяти указателей.
Ваше понимание верно.
Самое простое, что можно сделать, это использовать std::string
в качестве ключа. Таким образом, вы получите сравнения для фактического значения строки, работающего без особых усилий:
std::map<std::string, PSTRUCTTYPE> m;
PSTRUCTTYPE s = bar();
m.insert(std::make_pair("foo", s));
if(m.find("foo") != m.end()) {
// works now
}
Обратите внимание, что вы можете потерять память для своих структур, если не всегда удаляете их вручную. Если вы не можете сохранить по значению, рассмотрите возможность использования умных указателей.
В зависимости от вашего варианта использования, вам не обязательно хранить указатели на структуры:
std::map<std::string, STRUCTTYPE> m;
m.insert(std::make_pair("foo", STRUCTTYPE(whatever)));
Последнее замечание: typedef
структурирование того, как вы это делаете, является C-ism, в C ++ достаточно следующего:
typedef struct STRUCTTYPE {
// ...
} *PSTRUCTTYPE;