gpt4 book ai didi

c++ - 如何从新插入的对(到 map )中返回引用对?

转载 作者:搜寻专家 更新时间:2023-10-31 01:18:17 24 4
gpt4 key购买 nike

如何正确有效地将一对从新插入的对返回到 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 中的“真实对”中更改...

基本上我想要实现的是:

  1. 将新的对象 Z 插入到 map A
  2. ("Child"-class) 改变返回的object Z
  3. 中的东西
  4. 在每个更新周期中,遍历 map 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com