2016-03-19 8 views
-2

Wenn ich den folgenden Code habe, der 3 Vektoren als Werte in einer unordered_map speichert und ihnen über die Zeichenfolge in ihrem ersten Index als Schlüssel zuordnet:Zugriff auf einen Index in einem Vektor in einer Zuordnung von Zeichenfolgen zu Vektoren

unordered_map<string, vector <vector<string>>> my_map; 
vector<string> vec1 = {"banana", "apple"}; 
vector<string> vec2 = {"banana", "banana"}; 
vector<string> vec3 = {"banana", "pear"}; 

my_map["banana"].push_back(vec1); 
my_map["banana"].push_back(vec2); 
my_map["banana"].push_back(vec3); 

cout << my_map["banana"][0] << my_map["banana"][1] << my_map["banana"][2]; 

Wie kann ich auf bestimmte Indizes des Vektors der unordered_map zugreifen? Ich habe versucht, dies in der letzten Zeile zu tun, aber es funktioniert nicht. Ich habe auch versucht, .at (0) usw. anstelle der doppelten Klammern zu verwenden, aber das hat auch nicht funktioniert.

Antwort

1

my_map["banana"][0] ist ein std::vector<std::string>, so kann man nicht direkt ausgegeben, dass. Sie könnten den Operator << überladen oder einfach einen anderen Index angeben.


Sie haben eine std::unordered_map<std::string, std::vector<std::vector<std::string>>>, wobei jeder Schlüssel einen Vektor von Vektoren hat.

So schiebt my_map["banana"].push_back(vec1)vec1 an den Hauptvektor. Wenn Sie die Werte von vec1 zugreifen möchten, müssen Sie zwei Indizes angeben, denn:

my_map["banana"][0]      [0] 
     ^^^^^^ ^     ^
     key  vector 0    element 0 in the vector 
       (in main vector)  at position 0 in the main vector 

Hinweis: Diese "banana"


zurück, wenn Sie bekommen "pear" wollen, verwenden Sie:

my_map["banana"] [2]     [1] 
     ^^^^^^^  ^    ^ 
     key   third vector   second element 
         (vec3)    ("pear") 
+0

Oh, ich verstehe. Dummer Fehler von mir. Danke für die Hilfe! – user5482356

Verwandte Themen