it-swarm.com.de

map <string, string> Wie füge ich Daten in diese Map ein?

Ich muss Zeichenfolgen im Schlüsselwertformat speichern. Also benutze ich die Karte wie unten.

#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
}

Ich erhalte den Fehler in der Einfügezeile

fehler C2784: 'bool std :: operator <(const std :: _ Tree <_Traits> &, const std :: _ Tree <_Traits> &)': Template-Argument für 'const std :: _ Tree <_Traits> &' konnte nicht abgeleitet werden aus 'const std :: string'

Ich habe versucht, make_pair-Funktion auch wie unten, aber das meldet auch den gleichen Fehler.

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

Pls informierte mich, was falsch ist und was die Lösung für oben genanntes Problem ist. Nach dem Lösen des obigen Problems kann ich wie folgt verwenden, um den Wert basierend auf dem Schlüssel abzurufen

m.find(s1);
11
bjskishore123

Ich denke, Sie vermissen irgendwo einen #include <string>.

34

Könntest du das versuchen:

#include<string>

Es scheint, dass der Compiler keine Zeichenfolgen vergleichen kann. Vielleicht weiß sie noch nicht genug über Saiten, ist aber zu sehr auf Ihre map konzentriert, um das herauszufinden.

6
Daren Thomas

Versuchen Sie stattdessen m[s1] = v1;.

2
tdammers

Ich denke, es hat damit zu tun, dass <map> nicht <string>, sondern <xstring> enthält. Wenn Sie der Karte Elemente hinzufügen, muss sie durch Sortieren die korrekte Position in der Karte finden. Beim Sortieren versucht map, den operator < zu finden, von dem aus er die richtige Position für das neue Element findet. Es gibt jedoch keinen operator < für die Definition der Zeichenfolge in <xstring>, daher wird die Fehlermeldung angezeigt.

1
Default

Sie haben mehrere Möglichkeiten, wie Zeichenfolgen jetzt im Schlüsselwertformat gespeichert werden:

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

Und durchquere es in c ++ 11:

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

So erstellen Sie die Karte <..., ...>

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