Assosiatiivisten taulukoiden käyttö

C++:
Assosiatiivisten taulukoiden käyttö

Kuinka:

C++:ssa assosiatiiviset taulukot heräävät eloon <map> ja <unordered_map> otsikoiden kanssa. Katsotaan esimerkkejä näiden käytöstä.

Käyttäen std::map

std::map pitää elementit järjestettynä avaimen perusteella. Näin pääset alkuun:

#include <iostream>
#include <map>
#include <string>

int main() {
    std::map<std::string, int> ikaMap;
    
    // Arvojen lisääminen
    ikaMap["Alice"] = 30;
    ikaMap["Bob"] = 25;
    
    // Arvojen käyttö
    std::cout << "Bobin ikä: " << ikaMap["Bob"] << std::endl;
    
    // Iterointi mapin läpi 
    for(const auto &pari : ikaMap) {
        std::cout << pari.first << " on " << pari.second << " vuotta vanha." << std::endl;
    }
    
    return 0;
}

Käyttäen std::unordered_map

Kun järjestys ei ole tärkeä, mutta suorituskyky on, std::unordered_map on ystäväsi, tarjoten nopeamman keskimääräisen monimutkaisuuden lisäyksille, hauille ja poistoille.

#include <iostream>
#include <unordered_map>
#include <string>

int main() {
    std::unordered_map<std::string, double> tuoteHinta;
    
    // Arvojen lisääminen
    tuoteHinta["maito"] = 2.99;
    tuoteHinta["leipä"] = 1.99;
    
    // Arvojen käyttö
    std::cout << "Maidon hinta: $" << tuoteHinta["maito"] << std::endl;
    
    // Iterointi unordered_mapin läpi
    for(const auto &pari : tuoteHinta) {
        std::cout << pari.first << " maksaa $" << pari.second << std::endl;
    }
    
    return 0;
}

Syväsukellus

C++:n assosiatiiviset taulukot, erityisesti std::map ja std::unordered_map, eivät ole vain elementtien säilyttämistä varten. Ne tarjoavat perustan monimutkaisemmalle datan hallinnalle sallien operaatioita kuten haku, lisäys ja poisto tehokkaissa aikakompleksiteeteissa (logaritmisen std::map:lle ja keskimääräisen vakioajan std::unordered_map:lle). Tämä tehokkuus tulee niiden alla olevista tietorakenteista: tasapainotetusta puusta std::map:lle ja hajautustaulukosta std::unordered_map:lle.

Historiallisesti, ennen kuin nämä olivat osa standardikirjastoa, ohjelmoijien täytyi toteuttaa omia versioitaan tai käyttää kolmansien osapuolien kirjastoja, johtaen epäjohdonmukaisuuksiin ja potentiaalisiin tehokkuushäviöihin. Map:ien sisällyttäminen C++:n standardikirjastoon ei ainoastaan standardisoinut niiden käyttöä, vaan myös optimoi ne suorituskyvyltään eri kääntäjillä ja alustoilla.

Vaikka molemmat ovat tehokkaita, valinta std::map ja std::unordered_map välillä riippuu käyttötapaustesi erityiskohdista. Tarvitsetko järjestettyä dataa etkä välitä pienestä suorituskyvyn heikkenemisestä? Mene std::map kanssa. Jos olet nopeuden perässä etkä välitä järjestyksestä, std::unordered_map on todennäköisesti parempi valinta.

On kuitenkin tärkeää huomata, että työskennellessä monimutkaisten tietorakenteiden parissa, aina on kompromisseja. Joissakin niche-tapauksissa muut tietorakenteet tai jopa kolmansien osapuolien kirjastot saattavat tarjota parempaa suorituskykyä tai toiminnallisuutta sopien erityistarpeisiisi. Arvioi aina vaihtoehtojasi projektisi vaatimusten perusteella.