Назад к вопросам
Junior
295
questionbank

В чем разница между map и unordered_map в C++?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech 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;
}