19 votes

map<string, string> comment insérer des données dans cette map ?

J'ai besoin de stocker des chaînes de caractères dans un format clé-valeur. J'utilise donc Map comme ci-dessous.

#include<map>
using namespace std;
int main()
{
    map<string, string> m;
    string s1 = "1";
    string v1 = "A";

    m.insert(pair<string, string>(s1, v1)); //Error
}

J'obtiens l'erreur suivante à la ligne d'insertion

error C2784 : 'bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)' : impossible de déduire l'argument du modèle 'const std::_Tree<_Traits> &' de 'const std::string'.

J'ai également essayé la fonction make_pair comme ci-dessous, mais elle signale également la même erreur.

m.insert(make_pair(s1, v1));

Veuillez me faire savoir ce qui ne va pas et quelle est la solution pour ce problème. Après avoir résolu le problème ci-dessus, puis-je utiliser la méthode suivante pour récupérer la valeur basée sur la clé ?

m.find(s1);

41voto

Etienne de Martel Points 16020

Je pense que vous manquez un #include <string> quelque part.

9voto

Daren Thomas Points 26812

Pourriez-vous essayer ceci :

#include<string>

Il semble que le compilateur ne sache pas comment comparer des chaînes de caractères. Peut-être qu'il n'en sait pas encore assez sur les chaînes de caractères, mais qu'il est trop concentré sur votre map pour le découvrir.

6voto

Alexey Tkach Points 51

Voici comment configurer map<...,...>.

static std::map<std::string, RequestTypes> requestTypesMap = {
   { "order",       RequestTypes::ORDER       },
   { "subscribe",   RequestTypes::SUBSCRIBE   },
   { "unsubscribe", RequestTypes::UNSUBSCRIBE }
};

4voto

tdammers Points 14202

Essayez m[s1] = v1; à la place.

3voto

TadejP Points 555

Vous avez plusieurs possibilités pour stocker des chaînes de caractères dans le format clé-valeur :

m["key1"] = "val1";
m.insert(pair<string,string>("key2", "val2"));
m.insert({"key3", "val3"}); // c++11

Et le parcourir en C++11 :

for( auto it = m.begin(); it != m.end(); ++it )
{
  cout << it->first; // key
  string& value = it->second;
  cout << ":" << value << endl;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X