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);
Je pense que vous manquez un #include <string>
quelque part.
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.
Essayez m[s1] = v1;
à la place.
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.
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;
}
Voici le moyen de configurer la carte <..., ...>
static std::map<std::string, RequestTypes> requestTypesMap = {
{ "order", RequestTypes::ORDER },
{ "subscribe", RequestTypes::SUBSCRIBE },
{ "unsubscribe", RequestTypes::UNSUBSCRIBE }
};