C++:
Bruke associative tabeller
Hvordan:
I C++ blir assosiative tabeller levendegjort med hodefilene <map>
og <unordered_map>
. La oss ta noen eksempler for å se begge i aksjon.
Bruk av std::map
std::map
holder elementer sortert basert på nøkkelen. Slik kommer du i gang:
#include <iostream>
#include <map>
#include <string>
int main() {
std::map<std::string, int> aldersMap;
// Innsetting av verdier
aldersMap["Alice"] = 30;
aldersMap["Bob"] = 25;
// Tilgang til verdier
std::cout << "Bobs alder: " << aldersMap["Bob"] << std::endl;
// Iterere over en map
for(const auto &par : aldersMap) {
std::cout << par.first << " er " << par.second << " år gammel." << std::endl;
}
return 0;
}
Bruk av std::unordered_map
Når rekkefølge ikke spiller noen rolle, men ytelsen gjør det, er std::unordered_map
din venn, som tilbyr raskere gjennomsnittlig kompleksitet for innsettinger, oppslag og slettinger.
#include <iostream>
#include <unordered_map>
#include <string>
int main() {
std::unordered_map<std::string, double> produktPris;
// Innsetting av verdier
produktPris["melk"] = 2.99;
produktPris["brød"] = 1.99;
// Tilgang til verdier
std::cout << "Melkepris: $" << produktPris["melk"] << std::endl;
// Iterere over et unordered_map
for(const auto &par : produktPris) {
std::cout << par.first << " koster $" << par.second << std::endl;
}
return 0;
}
Dykk dypere
Assosiative tabeller i C++, spesielt std::map
og std::unordered_map
, handler ikke bare om å lagre elementer. De legger grunnlaget for mer kompleks datamodellering ved å tillate operasjoner som søk, innsetting og fjerning i effektive tidskompleksiteter (logaritmisk for std::map
og gjennomsnittlig konstant tid for std::unordered_map
). Denne effektiviteten kommer fra de underliggende datastrukturene: et balansert tre for std::map
og en hashtabell for std::unordered_map
.
Historisk sett, før disse var en del av standardbiblioteket, måtte programmerere implementere sine egne versjoner eller bruke tredjeparts biblioteker, noe som førte til inkonsekvenser og potensielle ineffektiviteter. Inkluderingen av kart i C++’s standardbibliotek standardiserte ikke bare bruken av dem, men optimaliserte dem også for ytelse på tvers av ulike kompilatorer og plattformer.
Selv om begge er kraftige, avhenger valget mellom en std::map
og std::unordered_map
av spesifikasjonene i bruksområdet ditt. Trenger du ordnede data og bryr deg ikke om en liten ytelsesnedgang? Gå for std::map
. Hvis du er etter hastighet og ikke bryr deg om rekkefølge, er std::unordered_map
sannsynligvis et bedre valg.
Likevel er det viktig å merke seg at når man arbeider med komplekse datastrukturer, er det alltid avveininger. I noen nisjetilfeller kan andre datastrukturer eller til og med tredjepartsbiblioteker tilby bedre ytelse eller funksjonalitet egnet til dine spesielle behov. Vei alltid alternativene dine basert på kravene til prosjektet ditt.