web-dev-qa-db-fra.com

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

J'ai besoin de stocker des chaînes au format de valeur clé. 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
}

Je reçois une erreur en dessous de la ligne d'insertion

erreur C2784: 'bool std :: operator <(const std :: _ Tree <_Traits> &, const std :: _ Tree <_Traits> &)': impossible de déduire un argument de modèle pour 'const std :: _ Tree <_Traits> &' à partir de 'const std :: string'

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

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

Pls m'a laissé savoir ce qui ne va pas et quelle est la solution pour le problème ci-dessus. Après avoir résolu le problème ci-dessus, puis-je utiliser comme ci-dessous pour récupérer une valeur basée sur une clé

m.find(s1);
11
bjskishore123

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

34
Etienne de Martel

Pourriez-vous essayer ceci:

#include<string>

Il semble que le compilateur ne sache pas comparer les chaînes. Peut-être qu’elle n’en sait pas encore assez sur les chaînes, mais qu’elle est trop concentrée sur votre map pour comprendre cela.

6
Daren Thomas

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

2
tdammers

Je pense que cela a à voir avec le fait que <map> n'inclut pas <string>, mais <xstring>. Lorsque vous ajoutez des éléments à la carte, celle-ci doit trouver la position correcte sur la carte en effectuant un tri. Lors du tri, map tente de localiser le operator <, à partir duquel il trouve l'emplacement correct du nouvel élément. Cependant, il n'y a pas de operator < pour la définition de chaîne dans <xstring>, vous obtenez donc le message d'erreur.

1
Default

Vous avez plusieurs possibilités pour stocker des chaînes dans un format de valeur clé:

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

Et parcourez-le en c ++ 11:

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

Voici le moyen de configurer la carte <..., ...>

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