std::unordered_map контейнер С++ несортированных уникальных записей ключ-значение

- unordered_map или это контейнер для хранения несортированных уникальных записей ключ-значение. Подключается через #include <unordered_map>

- Уникальными должны быть только ключи и может существовать множество записей с одинаковым значением.

- Ключ не обязательно целое число, может быть строкой и т.д.

- Для использования сортированных уникальных записей по ключу, используйте контейнер std::map.

- Для использования сортированных неуникальных записей по ключу, используйте контейнер std::multimap.

- Для использования несортированных неуникальных записей по ключу, используйте контейнер std::unordered_multimap.

МетодОписаниеПримерСложность
value_type& [const key_type& k] Доступ к элементу по КЛЮЧУ. auto i = ump.[20]; O(1), O(n)
value_type& at(const key_type& k) Доступ к элементу по ключу. Выбрасывает исключение при отсутствии ключа. auto i = ump.at(20); O(1), O(n)
begin() Возвращает итератор на первый элемент. cout << ump.begin()->first; O(1)
bucket(const key_type& key) Возвращает номер корзины в которой находится элемент. size_t sz ump.bucket(2); O(1)
bucket_count() Возвращает количество корзин. size_t sz ump.bucket_count(); O(1)
bucket_size(size_t num) Возвращает количество элементов в заданной корзине. 0 <= num < bucket_count() size_t sz ump.bucket_size(2); O(bucket_count())
clear() Удаляет все элементы map. ump.clear(); O(n)
count(const key_type& key) Возвращает количество элементов имеющих ключ key. size_t cnt = ump.count("hoba"); O(1)
emplace(key_type k, value_type value) Вставляет значение пару ключ-значение. При совпадении ключа значение не меняется. ump.emplace(8, "buba"); O(logN)
emplace_hint(iterator it, key_type k, value_type value) Вставляет значение пару ключ-значение. При совпадении ключа значение не меняется. ump.emplace_hint(ump.begin(), 8, "buba"); O(1)
O(logN)
empty() Возвращает пустой ли map. if(!ump.empty()); O(1)
end() Возвращает итератор на место после последнего элемента. auto i = ump.end(); O(1)
equal_range (const key_type& key) Возвращает пару итераторов окружающих элемент. auto i = ump.equal_range(3); O(1)
erase(const key_type& k) Удаляет элемент с заданным ключом. ump.erase(3); O(1)
erase(iterator pos) Удаляет элемент с заданным итератором. ump.erase(ump.begin()); O(1)
erase(iterator it_begin, iterator it_end) Удаляет элементы в заданном диапазоне итераторов. ump.erase(++ump.begin(), ump.end()); O(n)
find() Возвращает итератор на элемент по ключу или std::end(). auto i = ump.find(5); O(1)
insert(initializer_list<value_type<g il) Вставляет элемент. Если ключ уже существует - значение не меняется. auto i = ump.insert({2, "cow"});
ump.insert({{2, "two"}, {6, "six"}});
O(1)
O(n)
insert_or_assign(iterator it_begin, iterator it_end) Вставляет элементы из диапазона итераторов ump.insert(ump1.begin(), ump1.end()); O(n)
key_eq() Возвращает предикат (функцию) сравнения bool res = ump.key_eq()(1, 4); O(1)
load_factor() Возвращает float load_factor = size / bucket_count float res = ump.load_factor() O(1)
max_bucket_count() Возвращает максимальное количество корзин size_t sz = max_bucket_count(); O(1)
max_load_factor() Возвращает максимальный load_factor float lf = max_load_factor(); O(1)
max_load_factor(float new_lf) Устанавливает максимальный load_factor max_load_factor(0.5f); O(1)
max_size() Возвращает максимально возможный размер map. size_t msize = ump.max_size(); //192153584101141162 O(1)
rehash(size_type n); Устанавливает количество корзин в контейнере равное n. rehash(20) O(n)
reserve(size_type n) Устанавливает оптимальное количество корзин в контейнере чтобы вмещать n элементов. reserve(20); O(n)
swap(map& ump1) Обменивает содержимое контейнеров ump.swap(ump1); O(1)
unordered_map Конструктор без аргументов. Создает новый пустой map. unordered_map<int, string> ump; O(1)
unordered_map(initializer_list<value_type> il) Конструктор из списка инициализации. unordered_map<int, string> ump{{5, "ara"}, {3, "dog"}, {1, "cat"}}; O(n)
unordered_map(iterator it_start, iterator it_stop) Конструктор из диапазона итераторов другого контейнера. unordered_map mp1(++ump.begin(), ump.end()); O(n)
unordered_map(const map mp) Конструктор копирования. Создает со значениями mp unordered_map mp1(mp);
unordered_map<int, string> mp1(mp);
O(n)

#include <iostream> // cout
#include <unordered_map>

int main()
{
    std::unordered_map<int, std::string> ump1; // Создаем пустой контейнер
    std::unordered_map<int, std::string> ump2{{4, "four"}, {5, "five"}, {3, "three"}, {1, "one"}}; // Создаем контейнер из списка
    std::unordered_map ump3(++ump2.begin(), ump2.end()); // Создаем контейнер из диапазона итераторов
    std::unordered_map ump4(ump3); // Конструктор копирования
    std::unordered_map ump5 = ump3; // Конструктор присваивания

    for(auto& i : ump3){
        std::cout << i.first << ", " << i.second << "\n";
    }
}
2023-12-15



Понравилась страница?
Добавить в закладки
Или поделиться!

Связанные темы

array - статический массив (после создания размер не изменяется). Быстрее вектора.
Выбор контейнера из стандартной библиотеки С++.
deque - двусторонняя очередь (дек). Эффективное вставка-удаление по концам очереди.
forward_list - односвязный список с эффективной вставкой/удалением в начало списка.
list - двусвязный список с эффективной вставкой/удалением в любом месте списка.
map - словарь сортированных уникальных пар ключ-значение.
multimap - словарь сортированных неуникальных пар ключ-значение.
multiset - множество сортированных неуникальных элементов.
priority_queue - очередь с приоритетом (с сортировкой значений).
queue - очередь FIFO first in, first out "первый пришел - первый ушел".
set - множество сортированных уникальных элементов.
stack - стек LIFO last in, first out "последний пришел - первый ушел".
unordered_map - словарь несортированных уникальных пар ключ-значение.
unordered_multimap - словарь несортированных неуникальных пар ключ-значение.
unordered_multiset - множество несортированных неуникальных значений.
unordered_set - множество несортированных уникальных значений.
vector - вектор (массив) значений с изменяемым размером.