C++ map<string, vector<char> > zugreifen
Habe ich eine Karte erstellt, die von den Vektoren, die wie folgt aussieht:
map<string, vector<char> > myMap;
string key = "myKey";
vector<char> myVector;
myMap[key] = myVector;
Ich in der Lage sein möchten, hängen Sie "char' s ' um den Vektor in die Karte, aber ich kann nicht herausfinden, wie Zugriff auf Sprach-Vektor anfügen, sobald die jeweilige Taste/Wert(Vektor) erstellt wurde. Irgendwelche Vorschläge? Ich bin iteriert char ist und möglicherweise das hinzufügen einer Menge des Vektors, wie ich gehen, so wäre es nett, eine einfache Möglichkeit, es zu tun. Danke.
Ich möchte, dass der Vektor in der Karte angehängt, wie ich gehe. Ich brauche nicht den ursprünglichen Vektor...brauche ich nur zurückgeben, die Karte von key/vector s, die ich erstellt habe (nach apending), so dass ich übergeben Sie es an eine weitere Funktion. Was bedeutet die * map - * > tun? Ist, dass refrencing ein Zeiger? (Ich habe nicht bekommen, es in der Vorlesung noch) Auch, brauche ich:
myMap[key]->push_back('s');
oder
myMap[key].push_back('s');
??
- Sind Sie versuchen, erstellen Sie eine hash-Tabelle?
- Um klar zu sein-Sie möchten, zum Anhängen an
myVector
oder auf die Kopie des Objekts, die in der Karte gespeichert werden? Mir Milad Hosseiny hat geantwortet, als ob Sie möchten, verwenden Sie die Karte zum Anhängen anmyVector
, also entweder, die Antwort ist zutreffend, oder alle anderen sind.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anfügen:
Oder verwenden Sie
myMap.find
, aber dann haben Sie, um zu überprüfen, ob man sich einenend
iterator.operator[]
liefert eine Referenz auf dievector
.Aber dies ändert die
vector
gespeichert in dermap
, nicht das original, da Sie gespeichert haben, eine Kopie in dermap
mitmyMap[key] = myVector;
. Wenn das ist nicht, was Sie wollen, Sie sollten überdenken Sie Ihre design-und vielleicht store (smart -) Pointer zu Vektoren in der Karte.myMap[key]
ist ein lvalue an diestd::vector<char>
in der Karte. Der AusdruckmyMap[key].push_back('c');
ist absolut in Ordnung und der Weg zu gehen! (+1 auf die Antwort).Gegeben, Sie wissen, die wichtigsten:
können Sie auch das
map::operator[]
Zugriff auf die map-Eintrag, aber wenn der Schlüssel nicht existiert, wird ein neuer Eintrag mit diesem Schlüssel werden erstellt:oder einfach:
vector<char>& v
. Also diev.push_back(ch)
arbeiten, was iterator zeigen.iter->second
unter einem anderen Namen (z.B.v
), die Sie benötigen, um nachschlagen:std::vector<char>& v = iter->second;
.Zugriff auf die zugeordneten Wert, welcher in Ihrem Fall ist ein Vektor, Sie nur liefern Sie den Schlüssel in eckigen Klammern, wie Sie es, um den Wert zuzuweisen.
Also, Anhängen 'a':
a
geschoben, um den Vektor kloniert und ursprünglichen Vektor leer ist.myMap[key]
liefert eine Referenz, so dass es ändern Sie den Vektor in die Karte.Habe ich einen neuen Vorschlag. Sie können
vector<char>*
stattvector<char>
um zu sammeln Zeiger von Vektoren in Ihrermap
. Weitere Informationen finden Sie in der Balg-code:std::vector<char>
darüber hinaus fast sicher erstellen ein memory-leak?