Verwenden eine STL-Map-Container in C++
-
Verwenden von
std::map
zur Deklaration eines Map-Container-Objekts in C++ -
Verwenden der Member-Funktion
find
zum Suchen eines bestimmten Elements in einer Map in C++ -
Verwenden der Memberfunktion
insert
zum Speichern eines Elements in einer Map in C++ -
Verwenden der Memberfunktion
merge
zum Verbinden von Elementen zweier Map-Objekte in C++
Diese Anleitung zeigt Ihnen mehrere Methoden, wie Sie den STL-Map-Container in C++ verwenden können.
Verwenden von std::map
zur Deklaration eines Map-Container-Objekts in C++
Der Container std::map
implementiert eine sortierte Schlüssel-Wert-Paar-Datenstruktur, in der Schlüssel eindeutig sind. Schlüsselwerte sortieren Paarelemente standardmäßig in aufsteigender Reihenfolge; der Benutzer kann jedoch optional eine Vergleichsfunktion an die Vorlage std::map
übergeben. Sie können das Objekt map
mit einer Liste von Werten initialisieren, wobei jedes Element in separaten geschweiften Klammern angegeben wird. In diesem Fall erstellen wir eine Karte von string
-Paaren und drucken dann Elemente davon in den cout
-Stream. Beachten Sie, dass auf jedes Element als std::pair
-Elemente in der for
-Schleife zugegriffen wird.
#include <iostream>
#include <map>
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void printMap(Map& m) {
for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
cout << endl;
}
int main() {
std::map<string, string> m1 = {
{"11900K", "Core i9"},
{"11700K", "Core i7"},
{"11600K", "Core i5"},
{"1390P", "Xeon W"},
};
printMap(m1);
return EXIT_SUCCESS;
}
Ausgabe:
11600K : Core i5;
11700K : Core i7;
11900K : Core i9;
1390P : Xeon W;
Verwenden der Member-Funktion find
zum Suchen eines bestimmten Elements in einer Map in C++
Die Memberfunktion find
ist nützlich, um ein bestimmtes Schlüssel-Wert-Paar im Container map
zu suchen. Die Nachschlageoperation hat logarithmische Komplexität. Die Funktion find
nimmt die Referenz auf einen Schlüssel und gibt den Iterator zum Element mit dem entsprechenden Schlüssel zurück. Wenn kein Element mit dem angegebenen Schlüssel gefunden wird, wird ein Iterator nach dem Ende zurückgegeben.
Der folgende Codeausschnitt zeigt, wie Sie einen neuen map
-Container mit den Range-Iteratoren initialisieren. Beachten Sie, dass der erste Iterator mit der Funktion find
abgerufen wird. Außerdem kann es hilfreich sein, den zurückgegebenen Iterator auf Gültigkeit zu überprüfen.
#include <cassert>
#include <iostream>
#include <map>
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void printMap(Map& m) {
for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
cout << endl;
}
int main() {
std::map<string, string> m1 = {
{"11900K", "Core i9"},
{"11700K", "Core i7"},
{"11600K", "Core i5"},
{"1390P", "Xeon W"},
};
std::map<string, string> m2(m1.find("11700K"), m1.end());
printMap(m2);
auto ret = m1.find("11700K");
assert(ret != m1.end());
std::map<string, string> m3(ret, m1.end());
printMap(m3);
return EXIT_SUCCESS;
}
Ausgabe:
11700K : Core i7;
11900K : Core i9;
1390P : Xeon W;
Verwenden der Memberfunktion insert
zum Speichern eines Elements in einer Map in C++
Mit der Member-Funktion insert
können Sie dem bestehenden map
-Container neue Elemente hinzufügen. Das Member insert
nimmt die Referenz auf das hinzuzufügende Objekt und gibt einen Container std::pair
zurück, der aus einem Iterator zum eingefügten Element und dem Wert bool
besteht, der den erfolgreichen Einfügestatus anzeigt. Wenn das Einfügen fehlschlägt, zeigt der Iterator auf das Element, das den Vorgang verhindert hat.
#include <iostream>
#include <map>
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void printMap(Map& m) {
for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
cout << endl;
}
int main() {
std::map<string, string> m1 = {
{"11900K", "Core i9"},
{"11700K", "Core i7"},
{"11600K", "Core i5"},
{"1390P", "Xeon W"},
};
auto ret1 = m1.insert({"1390P", "Xeon W"});
if (!ret1.second) {
cout << "Not inserted!" << endl;
}
ret1 = m1.insert({"1390", "Xeon W"});
if (!ret1.second) {
cout << "Not inserted!" << endl;
}
printMap(m1);
return EXIT_SUCCESS;
}
Ausgabe:
Not inserted!
11600K : Core i5;
11700K : Core i7;
11900K : Core i9;
1390 : Xeon W;
1390P : Xeon W;
Verwenden der Memberfunktion merge
zum Verbinden von Elementen zweier Map-Objekte in C++
Die Member-Funktion merge
kann verwendet werden, um die Elemente aus zwei Map-Containern zu verbinden. Es wird vom map
-Objekt aufgerufen, das die kombinierten Elemente speichern muss und nimmt eine andere map
als Argument. Nach der Operation sind alle Zeiger und Referenzen auf übergebene Elemente gültig.
#include <iostream>
#include <map>
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void printMap(Map& m) {
for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
cout << endl;
}
int main() {
std::map<string, string> m1 = {
{"11900K", "Core i9"},
{"11700K", "Core i7"},
{"11600K", "Core i5"},
{"1390P", "Xeon W"},
};
std::map<string, string> m4 = {
{"11900KF", "Core i9"}, {"11600T", "Core i5"}, {"11700K", "Core i7"}};
m1.merge(m4);
printMap(m1);
return EXIT_SUCCESS;
}
Ausgabe:
11600K : Core i5;
11600T : Core i5;
11700K : Core i7;
11900K : Core i9;
11900KF : Core i9;
1390P : Xeon W;
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook