Стандартная библиотека C++<unordered_map>

В C++,<unordered_map>Является частью Стандартной библиотеки шаблонов (STL), предоставляя контейнер пар ключ-значение на основе хеш-таблицы.

иstd::mapОтличается,unordered_mapНе гарантирует порядок элементов, но обычно обеспечивает более высокую скорость поиска.

unordered_mapАссоциативный контейнер, который хранит пары ключ-значение, где каждый ключ уникален.unordered_mapИспользует хеш-таблицу для хранения элементов, что обеспечивает среднюю константную временную сложность для операций поиска, вставки и удаления.

Синтаксис

Ниже приведеныunordered_mapбазовый синтаксис:

#include <unordered_map>

std::unordered_map<key_type, value_type> map_name;
  • key_type— это тип ключа.
  • value_type— это тип значения.

Конструктор

unordered_mapЕго можно создать несколькими способами:

// 默认构造
std::unordered_map<int, std::string> myMap;

// 构造并初始化
std::unordered_map<int, std::string> myMap = {{1, "one"}, {2, "two"}};

// 构造并指定初始容量
std::unordered_map<int, std::string> myMap(10);

// 构造并复制另一个 unordered_map
std::unordered_map<int, std::string> anotherMap = myMap;

Базовые операции

Вставка элементов:

myMap.insert({3, "three"});

Доступ к элементам:

std::string value = myMap[1]; // 获取键为1的值

Удаление элементов:

myMap.erase(1); // 删除键为1的元素

Поиск элементов:

auto it = myMap.find(2); // 查找键为2的元素
if (it != myMap.end()) {
    std::cout << "Found: " << it->second << std::endl;
}

Пример

Ниже приведён пример использованияunordered_mapпростой пример, включая результат вывода.

Пример

#include <iostream>
#include <unordered_map>

int main() {
    // Создать unordered_map с ключами int и значениями string
    std::unordered_map<int, std::string> myMap;

    // Вставить несколько пар ключ-значение
    myMap[1] = "one";
    myMap[2] = "two";
    myMap[3] = "three";

    // Вывести все элементы
    for (const auto& pair : myMap) {
        std::cout << "Ключ: " << pair.first << ", Значение: " << pair.second << std::endl;
    }

    // Доступ к значению конкретного ключа
    std::cout << "Значение для ключа 2: " << myMap[2] << std::endl;

    // Удалить элемент с ключом 1
    myMap.erase(1);

    // Снова вывести все элементы
    std::cout << "После удаления ключа 1:" << std::endl;
    for (const auto& pair : myMap) {
        std::cout << "Ключ: " << pair.first << ", Значение: " << pair.second << std::endl;
    }

    return 0;
}

Вывод:

Key: 1, Value: one
Key: 2, Value: two
Key: 3, Value: three
Value for key 2: two
After erasing key 1:
Key: 2, Value: two
Key: 3, Value: three

Примечания

  • unordered_mapПорядок элементов не гарантируется, поэтому порядок обхода элементов может различаться при разных запусках.
  • Производительность хеш-таблицы зависит от хорошей хеш-функции, позволяющей избежать чрезмерных хеш-коллизий.
  • иstd::mapДля сравнения,unordered_mapМожет занимать больше памяти, когда количество элементов невелико.
Другие расширения