std:: map
|
Definiert in Header
<map>
|
||
|
template
<
class
Key,
|
(1) | |
|
namespace
pmr
{
template
<
|
(2) | (seit C++17) |
std::map
ist ein sortierter assoziativer Container, der Schlüssel-Wert-Paare mit eindeutigen Schlüsseln enthält. Schlüssel werden mithilfe der Vergleichsfunktion
Compare
sortiert. Such-, Entfernungs- und Einfügeoperationen haben logarithmische Komplexität. Maps werden üblicherweise als
Red–black trees
implementiert.
Iteratoren von
std::map
durchlaufen in aufsteigender Reihenfolge der Schlüssel, wobei aufsteigend durch den Vergleich definiert ist, der für die Konstruktion verwendet wurde. Das heißt, gegeben
-
m
, eine
std::map - it_l und it_r , dereferenzierbare Iteratoren für m , mit it_l < it_r .
m. value_comp ( ) ( * it_l, * it_r ) == true (aufsteigend sortiert bei Verwendung des Standardvergleichs).
Überall dort, wo die Standardbibliothek die Compare -Anforderungen verwendet, wird Eindeutigkeit durch die Äquivalenzrelation bestimmt. In ungenauen Begriffen gelten zwei Objekte a und b als äquivalent (nicht eindeutig), wenn keines kleiner als das andere verglichen wird: ! comp ( a, b ) && ! comp ( b, a ) .
std::map
erfüllt die Anforderungen von
Container
,
AllocatorAwareContainer
,
AssociativeContainer
und
ReversibleContainer
.
Alle Memberfunktionen von
std::map
sind
constexpr
: Es ist möglich,
std::map
-Objekte in der Auswertung eines konstanten Ausdrucks zu erstellen und zu verwenden.
Allerdings können
|
(seit C++26) |
Inhalt
Template-Parameter
Mitgliedstypen
Mitgliedsklassen
Memberfunktionen
Nicht-Member-Funktionen
Hinweise
Beispiel
Diesen Code ausführen
#include <iostream> #include <map> #include <string> #include <string_view> void print_map(std::string_view comment, const std::map<std::string, int>& m) { std::cout << comment; // Iterate using C++17 facilities for (const auto& [key, value] : m) std::cout << '[' << key << "] = " << value << "; "; // C++11 alternative: // for (const auto& n : m) // std::cout << n.first << " = " << n.second << "; "; // // C++98 alternative: // for (std::map<std::string, int>::const_iterator it = m.begin(); it != m.end(); ++it) // std::cout << it->first << " = " << it->second << "; "; std::cout << '\n'; } int main() { // Create a map of three (string, int) pairs std::map<std::string, int> m{{"CPU", 10}, {"GPU", 15}, {"RAM", 20}}; print_map("1) Initial map: ", m); m["CPU"] = 25; // update an existing value m["SSD"] = 30; // insert a new value print_map("2) Updated map: ", m); // Using operator[] with non-existent key always performs an insert std::cout << "3) m[UPS] = " << m["UPS"] << '\n'; print_map("4) Updated map: ", m); m.erase("GPU"); print_map("5) After erase: ", m); std::erase_if(m, [](const auto& pair){ return pair.second > 25; }); print_map("6) After erase: ", m); std::cout << "7) m.size() = " << m.size() << '\n'; m.clear(); std::cout << std::boolalpha << "8) Map is empty: " << m.empty() << '\n'; } Ausgabe: 1) Initial map: [CPU] = 10; [GPU] = 15; [RAM] = 20; 2) Updated map: [CPU] = 25; [GPU] = 15; [RAM] = 20; [SSD] = 30; 3) m[UPS] = 0 4) Updated map: [CPU] = 25; [GPU] = 15; [RAM] = 20; [SSD] = 30; [UPS] = 0; 5) After erase: [CPU] = 25; [RAM] = 20; [SSD] = 30; [UPS] = 0; 6) After erase: [CPU] = 25; [RAM] = 20; [UPS] = 0; 7) m.size() = 3 8) Map is empty: true FehlerberichteDie folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
Siehe auch
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||