Как говорят другие, вам, вероятно, следует использовать std :: string вместо char * в этом случае, хотя в принципе нет ничего плохого с указателем в качестве ключа, если это действительно то, что нужно.
Я думаю, что еще одна причина, по которой этот код не работает, заключается в том, что как только вы находите доступную запись на карте, вы пытаетесь повторно вставить ее в карту с тем же ключом (символ *). Поскольку этот ключ уже существует на вашей карте, вставка не удастся. Стандарт для map :: insert () определяет это поведение ... если значение ключа существует, вставка завершается неудачно, а сопоставленное значение остается неизменным. Тогда это все равно будет удалено. Вам нужно сначала удалить его, а затем снова вставить.
Даже если вы измените char * на std :: string, эта проблема останется.
Я знаю, что эта ветка довольно старая, и вы уже все исправили, но я не видел, чтобы кто-нибудь высказывал эту точку зрения, поэтому ради будущих зрителей я отвечаю.