Выполнение того, что вы делаете, является распространенным способом реализации кэширования.
Если элемент уже существует, оператор [] возвращает элемент. Если его там нет, он создаст «пробел» с конструктором по умолчанию, и вы можете написать в него для дальнейшего использования.
Конечно, обычно используется shared_ptr в качестве значения_типа, который при создании будет иметь «пустое» значение. В этом случае вам нужно получить shared_ptr по ссылке, чтобы вы могли вызывать reset () для него.
Как и в случае любых коллекций / кэширования и т. Д., Вы должны остерегаться проблем с безопасностью потоков, если это делается в многопоточном приложении.
Я не уверен, что вы хотели знать, можно ли где-то сохранить ссылку (или указатель на нее) и ожидать, что она будет действительной позже, когда на карту будут добавлены другие элементы, и да, так и будет.