Junior
Jaký je rozdíl mezi kontejnery map a unordered_map v C++?
sobes.tech AI
Odpověď od AI
Hlavní rozdíl spočívá v tom, jak jsou prvky ukládány a načítány:
std::map: Ukládá prvky v seřazeném pořadí podle klíče. Obvykle je implementováno na základě červené-černé stromové struktury. Vyhledávání, vkládání a mazání mají logaritmickou složitost O(log N), kde N je počet prvků.std::unordered_map: Ukládá prvky v hash tabulce. Pořadí prvků je libovolné. Průměrná složitost vyhledávání, vkládání a mazání je konstantní O(1). V nejhorším případě, při kolizích, může složitost dosáhnout O(N).
| Vlastnost | std::map |
std::unordered_map |
|---|---|---|
| Seřazení | Podle klíče (vzestupně) | Ne |
| Základní struktura | Červená-černá strom | Hash tabulka |
| Průměrná složitost | O(log N) | O(1) |
| Nejhorší případ | O(log N) | O(N) |
| Požadavky na klíč | Operátor < |
Hash funkce a == |
Příklad použití:
#include <map>
#include <unordered_map>
#include <string>
#include <iostream>
int main() {
// std::map: prvky seřazeny podle klíče
std::map<std::string, int> sorted_map;
sorted_map["banana"] = 3;
sorted_map["apple"] = 1;
sorted_map["cherry"] = 2;
// Výstup: apple 1, banana 3, cherry 2 (pořadí je důležité)
for (const auto& pair : sorted_map) {
std::cout << pair.first << " " << pair.second << std::endl;
}
std::cout << "---" << std::endl;
// std::unordered_map: pořadí prvků není garantováno
std::unordered_map<std::string, int> unordered_map;
unordered_map["banana"] = 3;
unordered_map["apple"] = 1;
unordered_map["cherry"] = 2;
// Výstup se může lišit (například cherry 2, apple 1, banana 3)
for (const auto& pair : unordered_map) {
std::cout << pair.first << " " << pair.second << std::endl;
}
return 0;
}