2016-05-10 7 views
0

Ich rufe unordered_map::emplace() und ich speichere den zurückgegebenen Wert (ein Paar). Ich möchte nur auf den eingefügten Wert des Paares zugreifen, aber für das Leben von mir kann ich die richtige Konfiguration dieses verwirrenden Paares nicht herausfinden.Zugriff auf eingefügtes Element aus unordered_map :: emplace Rückgabewert

Meine ungeordnete Karte Definition:

std::unordered_map<GUID, shared_ptr<Component>> components; 

ich am unordered_map::emplace()documentation haben gesucht; entsprechend sollte das erste Element in dem Paar die shared_ptr<Component> sein, aber der Compiler ist einfach nicht glücklich.

Im folgenden Code erhalte ich die Fehlermeldung: 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; 
}; 

Jede Idee, wie richtig die Paare zweiter Wert zugreifen zu?

Antwort

1

Die first des Paares von emplace zurückgekehrt ist ein Iterator -, durch den für unordered_map, auf einen pair<key, value> einen Zeiger wirkt wie. So erhalten Sie den Wert von dass Paar, Sie brauchen second:

return res.first->second->gUid; 
Verwandte Themen