Abrufen von Schlüsseln oder Werten aus einer std::map in einen Vektor
Abrufen aller Schlüssel oder Werte aus einer std::map in einen vector ist eine häufige Aufgabe, aber std::map selbst verfügt für diesen Zweck nicht über eine explizite Memberfunktion. Ein Ansatz besteht darin, benutzerdefinierte Funktoren zu definieren, wie im bereitgestellten Code gezeigt:
struct RetrieveKey { template <typename T> typename T::first_type operator()(T keyValuePair) const { return keyValuePair.first; } }; map<int, int> m; vector<int> keys; // Retrieve all keys transform(m.begin(), m.end(), back_inserter(keys), RetrieveKey()); // Dump all keys copy(keys.begin(), keys.end(), ostream_iterator<int>(cout, "\n"));
Diese Lösung manipuliert die Daten außerhalb der Karte, was in manchen Fällen möglicherweise nicht ideal ist. Ein alternativer Ansatz, der eine einfache For-Schleife verwendet, bietet eine klarere und explizitere Lösung:
map<int, int> m; vector<int> key, value; for (auto it = m.begin(); it != m.end(); ++it) { key.push_back(it->first); value.push_back(it->second); cout << "Key: " << it->first << endl; cout << "Value: " << it->second << endl; }
Indem wir die Karte auf diese Weise durchlaufen, können wir sowohl Schlüssel als auch Werte direkt in Vektorcontainer extrahieren.
Eine weitere Option vereinfacht den Prozess bei Verwendung der Boost-Bibliothek weiter:
map<int,int> m; pair<int,int> me; // what a map<int, int> is made of vector<int> v; BOOST_FOREACH(me, m) { v.push_back(me.first); cout << me.first << "\n"; }
Diese Version ist prägnant, lesbar und bietet explizite Kontrolle über die Abrufprozess. Die Auswahl der am besten geeigneten Methode hängt von den spezifischen Bedürfnissen und Vorlieben des Entwicklers ab.
Das obige ist der detaillierte Inhalt vonWie extrahiere ich Schlüssel und Werte effizient aus einer std::map in Vektoren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!