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中所做的任何更改都不会在映射中的“真实对”中更改
基本上,我想要实现的是:
您正在使用的
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对于局部变量,它是函数的一个参数。