Junior
Mi a különbség a map és az unordered_map között a C++-ban?
sobes.tech MI
Válasz az MI-től
std::map — egy asszociatív tároló, amely "kulcs-érték" párokat tárol, rendezve a kulcs szerint. Egy piros-fekete fa alapú. Az elérés, beszúrás és törlés idő logaritmikus (O(log n)).
std::unordered_map — egy asszociatív tároló, amely "kulcs-érték" párokat tárol hash táblában. Az elemek nem rendezettek. Átlagosan az elérés, beszúrás és törlés időállandó (O(1)), de legrosszabb esetben lineáris (O(n)) lehet a kollíziók miatt. Egy hash függvény szükséges a kulcs típusához és egy egyenlőség operátor (operator==).
| Jellemző | std::map |
std::unordered_map |
|---|---|---|
| Alap | Piros-fekete fa | Hash tábla |
| Elemek rendezése | Kulcs szerint | Nincs rendezés |
| Átlagos műveleti komplexitás | O(log n) | O(1) |
| Legrosszabb esetben | O(log n) | O(n) (ütközések esetén) |
| Követelmények a kulcsra | < operátor |
Hash függvény, == operátor |
| Memóriahasználat | Többet | Kevesebbet (átlagosan, változhat) |
Használati példa:
#include <map>
#include <unordered_map>
#include <string>
int main() {
// std::map használata
std::map<std::string, int> my_map;
my_map["apple"] = 1;
my_map["banana"] = 2;
my_map["orange"] = 3;
// Az elemek rendezve tárolódnak kulcs szerint (apple, banana, orange)
// std::unordered_map használata
std::unordered_map<std::string, int> my_unordered_map;
my_unordered_map["apple"] = 1;
my_unordered_map["banana"] = 2;
my_unordered_map["orange"] = 3;
// Az elemek rendezés nélkül tárolódnak
return 0;
}