Sobes.tech
Junior

Каква е разликата между map и unordered_map в C++?

sobes.tech AI

Отговор от AI

std::map — асоциативен контейнер, който съхранява двойки "ключ-стойност", сортирани по ключа. Базиран на червено-черно дърво. Времето за достъп, вмъкване и изтриване на елементи е логаритмично (O(log n)).

std::unordered_map — асоциативен контейнер, който съхранява двойки "ключ-стойност" в хеш таблица. Елементите не са сортирани. Средното време за достъп, вмъкване и изтриване е константно (O(1)), но в най-лошия случай може да бъде линейно (O(n)) поради колизии. Изисква хеш функция за типа на ключа и оператор за сравнение за равенство (operator==).

Характеристика std::map std::unordered_map
Основа Червено-черно дърво Хеш таблица
Сортиране на елементите По ключ Не
Средна сложност на операции (достъп, вмъкване, изтриване) O(log n) O(1)
Най-лоша сложност O(log n) O(n) (при колизии)
Изисквания към ключа < оператор Хеш функция, == оператор
Памет консумация Повече По-малко (средно, може да варира)

Пример за използване:

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

int main() {
    // Използване на std::map
    std::map<std::string, int> my_map;
    my_map["apple"] = 1;
    my_map["banana"] = 2;
    my_map["orange"] = 3;
    // Елементите са сортирани по ключ (apple, banana, orange)

    // Използване на std::unordered_map
    std::unordered_map<std::string, int> my_unordered_map;
    my_unordered_map["apple"] = 1;
    my_unordered_map["banana"] = 2;
    my_unordered_map["orange"] = 3;
    // Елементите са несортирани
    
    return 0;
}