Sobes.tech
Junior

Kāda ir atšķirība starp map un unordered_map C++?

sobes.tech AI

Atbilde no AI

std::map — asociatīvs konteineris, kas glabā pārus "atslēga-vērtība" un ir sakārtots pēc atsleģas. Balstīts uz sarkanu-melnu koku. Piekļuve, pievienošana un dzēšana ir logaritmiskas (O(log n)).

std::unordered_map — asociatīvs konteineris, kas glabā pārus "atslēga-vērtība" hash tabulā. Elementi nav sakārtoti. Vidējais piekļuves, pievienošanas un dzēšanas laiks ir konstants (O(1)), bet sliktākajā gadījumā var būt lineārs (O(n)) kolīziju dēļ. Prasa hash funkciju atslēgas tipam un vienādojuma operatoru (operator==).

Raksturlielums std::map std::unordered_map
Pamats Sarkanu-melns koks Hash tabula
Elementu kārtošana Pēc atslēgas Nav
Vidējais operāciju sarežģītums (piekļuve, pievienošana, dzēšana) O(log n) O(1)
Sliktākais operāciju sarežģītums (piekļuve, pievienošana, dzēšana) O(log n) O(n) (kolīziju gadījumā)
Atslēgas prasības < operators Hash funkcija, == operators
Atmiņas patēriņš Lielāks Mazāks (vidēji, bet var atšķirties)

Piemērs lietošanai:

#include <map>
#include <unordered_map>
#include <string>

int galva() {
    // Izmantošana ar std::map
    std::map<std::string, int> mans_map;
    mans_map["apple"] = 1;
    mans_map["banana"] = 2;
    mans_map["orange"] = 3;
    // Elementi ir sakārtoti pēc atslēgas (apple, banana, orange)

    // Izmantošana ar std::unordered_map
    std::unordered_map<std::string, int> mans_neizkārtots_map;
    mans_neizkārtots_map["apple"] = 1;
    mans_neizkārtots_map["banana"] = 2;
    mans_neizkārtots_map["orange"] = 3;
    // Elementi ir bez noteiktas kārtības
    
    return 0;
}