web-dev-qa-db-fra.com

Stockage de la carte standard sur la carte

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?

29
Max Frai

Essayer:

std::map< std::string, std::map<std::string, std::string> > someStorage;

someStorage["Hi"]["This Is Layer Two"] = "Value";
43
Martin York
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));
25
Dark Falcon

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.

4
TToni

// 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;

    }

}
3
Gelo

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")}) );
0
Roma Pavlov