C++ 如何从新插入的对(映射)返回引用对?

C++ 如何从新插入的对(映射)返回引用对?,c++,data-structures,std,stdmap,std-pair,C++,Data Structures,Std,Stdmap,Std Pair,如何正确有效地将新插入的对返回到映射 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;

如何正确有效地将新插入的对返回到映射

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;
}
inline pair*createObj(无符号int-UID){
静态对ret;
插入(对(UID,T());
如果(UID_计数器秒);
返回和返回;
}
上面返回一个要使用的对象,但是我在ret中所做的任何更改都不会在映射中的“真实对”中更改

基本上,我想要实现的是:

  • 将新的对象Z插入贴图A
  • (“Child”-类)更改返回的对象Z中的内容
  • 在每个更新周期中,迭代地图A中的对象,并在更新时使用加载到对象“A-Z”中的实际数据

  • 您正在使用的
    insert
    的特定重载返回一个
    std::pair
    。特别是,该对的第一个成员是新插入的元素或已经存在的元素的迭代器。因此:

    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;
    }
    
    对&
    createObj(无符号整数UID)
    {
    auto inserted=objList.insert(成对(UID,T());
    
    如果(UID_)计数器,则您的要求非常不明确。当您插入地图时,您将获得(通过一点间接方式)对插入对象的引用,所以这没有问题。你能更清楚地描述一下你的目标吗?我的目标只是返回对新插入的mapI的一对引用。我想Luc已经帮你解决了。请仔细阅读
    std::map
    的手册,它的界面在不寻常的地方包含了很多对。谢谢!基本上我预见到了返回“ret”而不是地图中的实际元素的问题……但现在我有了一些东西要处理。:)条件的意义是什么?
    UID
    是一个没有效果的局部变量。但是,由于某种原因,我得到了指向插入的
    *的
    非法间接寻址。首先,使用你的代码示例…@Alexander:你有C++11吗?否则你不能说
    自动
    ,但必须拼出类型。@kerrek sb,UID是n对于局部变量,它是函数的一个参数。