如何正确有效地将新插入的对中的一对返回到 map ?
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 中进行更改, map 中的“真实对”都不会更改...
基本上我想要实现的是:
- 将新对象 Z 插入 map A
- ("Child"-class) 更改返回的对象 Z 中的内容
- 在每个更新周期中,迭代映射 A 中的对象,并使用加载到对象“A-Z”中的实际数据正在更新...
最佳答案
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
中。 ,因此通过您返回的指针进行的任何修改只会影响该拷贝。
关于c++ - 如何从新插入的对(到 map )返回引用对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7296731/