2016-05-22 10 views
1

Ich habe einWie ein Schlüssel einzusetzen, aber keinen Wert in einer std :: unordered_map

std::unordered_map< std::string, std::unordered_map<std::string, std::string> > 

und ich möchte nur den Schlüssel einsetzen und später die Werte aufzufüllen.

zB wie folgt aus:

#include <string> 
#include <unordered_map> 

int main() { 
    std::unordered_map< std::string, std::unordered_map<std::string, std::string> > mymap; 
    mymap.insert("TestKey"); 
} 

Welche Fehler gibt:

source.cpp(6): error C2664: 'void std::_Hash<std::_Umap_traits<_Kty,_Ty,std::_Uhash_compare<_Kty,_Hasher,_Keyeq>,_Alloc,false>>::insert(std::initializer_list<std::pair<const _Kty,_Ty>>)' : cannot convert argument 1 from 'const char [8]' to 'std::pair<const _Kty,_Ty> &&' 
1>   with 
1>   [ 
1>    _Kty=std::string 
1> ,   _Ty=std::unordered_map<std::string,std::string,std::hash<std::string>,std::equal_to<std::string>,std::allocator<std::pair<const std::string,std::string>>> 
1> ,   _Hasher=std::hash<std::string> 
1> ,   _Keyeq=std::equal_to<std::string> 
1> ,   _Alloc=std::allocator<std::pair<const std::string,std::unordered_map<std::string,std::string,std::hash<std::string>,std::equal_to<std::string>,std::allocator<std::pair<const std::string,std::string>>>>> 
1>   ] 
1>   and 
1>   [ 
1>    _Kty=std::string 
1> ,   _Ty=std::unordered_map<std::string,std::string,std::hash<std::string>,std::equal_to<std::string>,std::allocator<std::pair<const std::string,std::string>>> 
1>   ] 
1>   Reason: cannot convert from 'const char [8]' to 'std::pair<const _Kty,_Ty>' 
1>   with 
1>   [ 
1>    _Kty=std::string 
1> ,   _Ty=std::unordered_map<std::string,std::string,std::hash<std::string>,std::equal_to<std::string>,std::allocator<std::pair<const std::string,std::string>>> 
1>   ] 
1>   No constructor could take the source type, or constructor overload resolution was ambiguous 

Wie kann ich den Schlüssel ohne Werte hinzufügen?

+0

Meines Wissens ist dies nicht möglich, aber man konnte einen Zeiger-Typ für die Verwendung value und weise 'NULL' oder' nullptr' zu, wenn kein Wert vorhanden sein soll. –

Antwort

2

operator[] wird einen Wert initialisierten Wert einfügen, wenn ein Element mit dem angegebenen Schlüssel nicht bereits vorhanden ist. So können Sie einfach tun:

mymap["TestKey"]; 

Wenn Sie einen Verweis auf den Wert erhalten möchten, dann

auto& val = mymap["TestKey"];