Junior
Koja je razlika između kontejnera map i unordered_map u C++?
sobes.tech АИ
Одговор од АИ
Главна разлика је у начину на који се елементи чувају и преузимају:
std::map: Чува елементе у сортираном реду по кључу. Обично се реализује на основу црвено-црног стабла. Проналажење, уметање и брисање имају логаритамску сложеност O(log N), где N представља број елемената.std::unordered_map: Чува елементе у хеш табели. Редослед елемената је произвољан. У просеку, проналажење, уметање и брисање имају константну сложеност O(1). У најгорем случају, при колизијама, сложеност може достићи O(N).
| Карактеристика | std::map |
std::unordered_map |
|---|---|---|
| Поредак | По кључу (растући) | Не |
| Основна структура | Црвено-црно стабло | Хеш табела |
| Просечна сложеност | O(log N) | O(1) |
| Најгоре случај | O(log N) | O(N) |
| Захтеви за кључ | Оператор < |
Хеш функција и == |
Пример употребе:
#include <map>
#include <unordered_map>
#include <string>
#include <iostream>
int main() {
// std::map: елементи сортирани по кључу
std::map<std::string, int> sorted_map;
sorted_map["banana"] = 3;
sorted_map["apple"] = 1;
sorted_map["cherry"] = 2;
// Излаз: apple 1, banana 3, cherry 2 (ред је важан)
for (const auto& pair : sorted_map) {
std::cout << pair.first << " " << pair.second << std::endl;
}
std::cout << "---" << std::endl;
// std::unordered_map: редослед елемената није гарантован
std::unordered_map<std::string, int> unordered_map;
unordered_map["banana"] = 3;
unordered_map["apple"] = 1;
unordered_map["cherry"] = 2;
// Излаз може варирати (нпр., cherry 2, apple 1, banana 3)
for (const auto& pair : unordered_map) {
std::cout << pair.first << " " << pair.second << std::endl;
}
return 0;
}