如何正确有效地将一对从新插入的对返回到地图?
inline pair<unsigned int, T> *createObj(unsigned int UID){
static pair<unsigned int, T> ret;
objList.insert(pair<unsigned int, T>(UID, T()));
if (UID_Counter <= UID)
UID_Counter = UID+1;
ret = make_pair(UID, objList.find(UID)->second);
return &ret;
}
上面的内容会返回一个要使用的对象,但无论我在 ret 中更改的是什么,都不会在地图中的“真实对”中发生变化...
基本上我想要达到的目标是:
答案 0 :(得分:4)
您正在使用的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
内存储了映射对象的副本,因此通过您返回的指针进行的任何修改都只会影响该代码。