我正在调用unordered_map::emplace()
并且我正在存储返回的值(一对)。我只是想从对中访问插入的值但是对于我的生活,我无法弄清楚这个令人困惑的对的正确配置。
我的无序地图定义:
std::unordered_map<GUID, shared_ptr<Component>> components;
我查看了unordered_map::emplace()
documentation;根据这个,对中的第一个元素应该是shared_ptr<Component>
,但编译器不满意。
在下面的代码中,我收到错误:Error 2 error C2227: left of '->gUid' must point to class/struct/union/generic type
class Component {
public:
template<typename T, typename... Params>
GUID addComponent(Params... params)
{
auto cmp = Component::create<T>(params...);
auto res = components.emplace(cmp->gUid, cmp);
if (!res.second) {
GUID gUid;
getNullGUID(&gUid);
return gUid;
}
return (*res.first)->gUid; // compiler error here
// *Yes I know I can do: return cmp->gUid;
}
GUID gUid; // initialised in constructor
std::unordered_map<GUID, std::shared_ptr<Component>> components;
};
知道如何正确访问第二对值吗?
答案 0 :(得分:1)
从first
返回的对的emplace
是迭代器 - 对于unordered_map,它就像指向pair<key, value>
的指针。因此,要从那个对中获取值,您需要second
:
return res.first->second->gUid;