Конкретная перегрузка insert
, которую вы используете, возвращает std::pair<iterator, bool>
.В частности, первый член этой пары является итератором либо для недавно вставленного элемента, либо для уже существующего элемента.Таким образом:
pair<const unsigned int, T>&
createObj(unsigned int UID)
{
auto inserted = objList.insert(pair<unsigned int, T>(UID, T()));
if (UID_Counter <= UID)
UID_Counter = UID+1;
return *inserted.first;
}
Обратите внимание, что я возвращаю ссылку, где вы возвращали указатель, и что тип ключа const unsigned int
, а не unsigned int
.Вы также можете использовать map_type::value_type
(где map_type
- это тип вашего контейнера).
Если вам интересно, почему ваш код не работает, это потому, что вы хранили копию сопоставленной карты.объект внутри ret
, поэтому любое изменение через указатель, который вы вернули, повлияет только на эту копию.