Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

std::map in C++ Onder de Knie: Uitgebreide Handleiding met Code‑Voorbeelden

Wat is std::map?

In de C++ Standard Template Library (STL) is std::map een associatieve container die elementen opslaat als sleutel‑waarde‑paren. Elke sleutel is uniek en de container houdt de elementen automatisch gesorteerd volgens de vergelijkingsfunctie van de sleutel (standaard std::less). De waarden kunnen van elk type zijn en worden benaderd via hun bijbehorende sleutels.

Waarom std::map Gebruiken?

  • Sleutels zijn uniek en gesorteerd opgeslagen, wat snelle lookup‑operaties mogelijk maakt (O(log n)).
  • Ideaal voor scenario's die een associatieve array of dictionary met gegarandeerde ordening vereisen.
  • Intern geïmplementeerd als een gebalanceerde binaire zoekboom (red‑black tree), wat betrouwbare prestaties bij alle operaties garandeert.
  • Ondersteunt snelle invoeging, verwijdering en traversie.
  • Rijke API die naadloos integreert met iterators en STL‑algoritmes.

Syntaxis

Declareer een map met:

std::map<KeyType, ValueType> mapNaam;
  • KeyType – het type van de sleutel (moet vergelijkbaar zijn).
  • ValueType – het type van de gemapte waarde.
  • mapNaam – de variabelenaam.

Voorbeeld:

std::map<std::string, int> ageMap;

Member Types

  • key_type: Type van de sleutels.
  • mapped_type: Type van de gemapte waarden.
  • value_type: std::pair<const key_type, mapped_type>
  • iterator: Bidirectionele iterator over value_type.
  • const_iterator, reverse_iterator, const_reverse_iterator
  • size_type, difference_type

Ingebouwde Functies

  • begin() – iterator naar eerste element.
  • end() – past‑the‑end iterator.
  • size() – aantal elementen.
  • empty() – of de map leeg is.
  • insert() – voeg een sleutel/waarde‑paar toe.
  • find() – zoek een element op sleutel.
  • erase() – verwijder elementen via iterator of sleutel.
  • clear() – verwijder alle elementen.
  • Overige hulpfuncties zoals count() en lower_bound() zijn ook beschikbaar.

Itereren over Map‑Elementen

Iterators geven je volledige controle over traversie‑volgorde, die altijd gesorteerd is op sleutel.

#include <iostream>
#include <string>
#include <map>
using namespace std;
int main() {
    map<int, string> students;
    students.insert({200, "Alice"});
    students.insert({201, "John"});
    cout << "Map size is: " << students.size() << endl;
    cout << endl << "Default map order:" << endl;
    for (auto it = students.begin(); it != students.end(); ++it) {
        cout << it->first << ": " << it->second << endl;
    }
    return 0;
}

Output:

std::map in C++ Onder de Knie: Uitgebreide Handleiding met Code‑Voorbeelden

Data Invoegen in std::map

Gebruik insert() voor nieuwe entries; het weigert stilletjes duplicaten. Om een bestaande sleutel te overschrijven, gebruik insert_or_assign().

#include <map>
#include <iostream>
using namespace std;
int main() {
    map<int, int> m{{1,3},{2,4},{3,5}};
    m.insert({5,6}); // voegt nieuw paar toe
    m.insert({1,8}); // genegeerd, sleutel 1 bestaat al
    m.insert_or_assign(1,6); // werkt sleutel 1 bij naar waarde 6
    cout << "Key\tElement\n";
    for (auto& p : m) {
        cout << p.first << '\t' << p.second << '\n';
    }
    return 0;
}

Output:

std::map in C++ Onder de Knie: Uitgebreide Handleiding met Code‑Voorbeelden

Zoeken in een Map

Het vinden van een sleutel is eenvoudig met find(). Als de sleutel bestaat, wijst de geretourneerde iterator naar het element; anders wordt end() teruggegeven.

#include <iostream>
#include <map>
using namespace std;
int main() {
    map<int, string> students;
    students.insert({200, "Alice"});
    students.insert({201, "John"});
    if (auto it = students.find(201); it != students.end()) {
        cout << "Key 201 has value: " << it->second << endl;
    }
    return 0;
}

Output:

std::map in C++ Onder de Knie: Uitgebreide Handleiding met Code‑Voorbeelden

Data Verwijderen uit een Map

Elementen kunnen verwijderd worden via sleutel of via iterator. De erase()-methode invalideert alleen iterators die naar het gewiste element wijzen.

#include <iostream>
#include <map>
using namespace std;
int main() {
    map<string, int> myMap;
    myMap["cow"] = 1;
    myMap["cat"] = 2;
    myMap["lion"] = 3;
    if (auto it = myMap.find("cat"); it != myMap.end()) {
        myMap.erase(it);
    }
    for (auto& p : myMap) {
        cout << p.first << ": " << p.second << endl;
    }
    return 0;
}

Output:

std::map in C++ Onder de Knie: Uitgebreide Handleiding met Code‑Voorbeelden

Samenvatting

  • std::map is een gesorteerde associatieve container met unieke sleutels.
  • Sleutels bieden efficiënte lookup; waarden houden de geassocieerde data.
  • Alle kernoperaties draaien in logaritmische tijd door de onderliggende red‑black tree.
  • Iterators maken traversie, invoeging, verwijdering en range‑queries mogelijk.
  • Met insert_or_assign() is het bijwerken van waarden eenvoudig.
  • Gebruik find() voor snelle existentie‑checks en directe toegang.
  • Erase‑operaties kunnen individuele elementen of de hele map wissen.

C Taal

  1. C Standaardbibliotheek-functies onder de knie krijgen: Een praktische gids
  2. C++ Operators Uitgelegd: Typen, Voorbeelden en Voorbeeldprogramma's
  3. C++ do‑while Lus: Syntaxis, Praktische Voorbeelden en Geneste Lussen
  4. C++ Switch‑Case Onder de Knie: Syntaxis, Gebruik en Praktische Voorbeelden
  5. C++ Dynamische Array‑Allocatie: Praktische Handleiding met Code‑Voorbeelden
  6. C++ Pointers Onder de Knie: Concepten, Voorbeelden & Praktische Toepassingen
  7. C++ Operator Overloading – Praktische Handleiding met Code‑Voorbeelden
  8. C++ Structs Uitgelegd met een Praktisch Voorbeeld
  9. Beheersen van std::list in C++: Syntaxis, Functies & Praktische Voorbeelden
  10. C++ Functies Uitgelegd met Praktische Codevoorbeelden
  11. C++ Struct vs Class: Belangrijkste Verschillen, Syntaxis en Beste Gebruikssituaties