Способ работы с std::map
заключается в том, что, если ключ не существует, класс карты вставит значение по умолчанию, а затем вернет lvalue (назначаемую ссылку на значение, связанное с ключом), поэтому может быть назначено новое значение.
Итак, в следующем примере кода, предполагая, что map
пусто, это вставит 10 в карту и свяжет его со значением 3.
map[10] = 3;
С вашим пользовательским классом карты operator[]
должен сначала проверить, существует ли Ключ k, и, если нет, вставить новую пару ключ / значение (используя конструктор по умолчанию typename Val
) в карту. Затем вы можете вернуть ссылку на значение, связанное с новым ключом, чтобы пользователь мог присвоить ему значение. Обратите внимание, что это означает, что Val должен быть Assignable и иметь конструктор по умолчанию.
Это позволяет operator[]
использоваться как для вставки, так и для поиска. Вам также следует перегрузить const
версию operator[]
, которая, конечно, поддерживает только поиск.
Редактировать: теперь я заметил в вашем коде, что вы возвращаете указатель. Если вы хотите использовать парадигму вставки / поиска для operator[]
, используемую std :: map, имеет смысл возвращать ссылку. Возврат указателя дает вам преимущество, заключающееся в том, что вы можете проверить возвращаемое значение operator[]
для NULL, чтобы проверить, не существует ли ключ, но, опять же, если вы хотите, чтобы operator[]
предоставлял функции поиска и вставки, ссылка иди сюда.