从unordered_map :: emplace返回值访问inserted元素

时间:2016-05-10 04:33:15

标签: c++11 unordered-map

我正在调用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;
};

知道如何正确访问第二对值吗?

1 个答案:

答案 0 :(得分:1)

first返回的对的emplace迭代器 - 对于unordered_map,它就像指向pair<key, value>的指针。因此,要从那个对中获取值,您需要second

return res.first->second->gUid;