Je dois stocker std :: map comme valeur dans std :: map
std::map< std::string, std::map<std::string, std::string> > someStorage;
Comment insérer dans la deuxième carte (intérieure)? J'ai essayé avec:
someStorage.insert( std::make_pair("key", std::make_pair("key2", "value2")) );
Mais cela jette beaucoup d'erreurs. Qu'est-ce qui ne va pas?
Essayer:
std::map< std::string, std::map<std::string, std::string> > someStorage;
someStorage["Hi"]["This Is Layer Two"] = "Value";
someStorage["key"].insert(std::make_pair("key2", "value2")));
Si vous souhaitez toujours utiliser l'insertion sur la carte extérieure, voici une façon de le faire
std::map<std::string, std::string> inner;
inner.insert(std::make_pair("key2", "value2"));
someStorage.insert(std::make_pair("key", inner));
Une carte a une méthode d'insertion qui accepte une paire clé/valeur. Votre clé est de type chaîne, donc ce n'est pas un problème, mais votre valeur est pas de paire de types (que vous générez) mais de type map. Vous devez donc soit stocker une carte complète comme valeur o vous modifiez la définition de carte initiale pour accepter une paire comme valeur.
// Essayez ceci:
std::map< std::string, std::map<std::string, std::string> > myMap;
myMap["key one"]["Key Two"] = "Value";
myMap["Hello"]["my name is"] = "Value";
// Pour imprimer la carte:
for( map<string,map<string,string> >::const_iterator ptr=myMap.begin();ptr!=myMap.end(); ptr++) {
cout << ptr->first << "\n";
for( map<string,string>::const_iterator eptr=ptr->second.begin();eptr!=ptr->second.end(); eptr++){
cout << eptr->first << " " << eptr->second << endl;
}
}
Vous pouvez également utiliser l'initialisation de la liste:
someStorage.insert( std::make_pair("key", std::map<std::string, std::string> {std::make_pair("key2", "value2")}) );