Heim >Backend-Entwicklung >C++ >Wie extrahiere ich Schlüssel und Werte effizient aus einer std::map in Vektoren?

Wie extrahiere ich Schlüssel und Werte effizient aus einer std::map in Vektoren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-29 20:30:11599Durchsuche

How to Efficiently Extract Keys and Values from a std::map into Vectors?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn