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

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

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

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

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

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

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

МетодОписаниеПримерСложность
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, "eight"); O(1)
emplace_hint(iterator it, key_type k, value_type value) Вставляет значение пару ключ-значение. ump.emplace_hint(ump.begin(), 8, "eight"); O(1)
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) Вставляет элемент. Если ключ уже существует - значение не меняется. ump.insert({2, "cow"});
ump.insert({{2, "two"}, {6, "six"}});
O(1)
O(n)
insert(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_multimap Конструктор создания пустого контейнера. unordered_map<int, string> ump; O(1)
unordered_multimap(initializer_list<value_type> il) Конструктор из списка инициализации. unordered_multimap<int, string> ump{{5, "ara"}, {3, "dog"}, {1, "cat"}}; O(n)
unordered_multimap(iterator it_start, iterator it_stop) Конструктор из диапазона итераторов другого контейнера. unordered_map ump1(++ump.begin(), ump.end()); O(n)
unordered_multimap(const unordered_multimap& ump) Конструктор копирования. Создает со значениями mp unordered_multimap ump1(ump);
unordered_multimap<int, string> ump1(ump);
O(n)

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

int main() {
    std::unordered_multimap<int, std::string> ump1; // Создание пустого контейнера
    std::unordered_multimap<int, std::string> ump2{{2, "Apple"}, {4, "Pear"}}; // Создание 2х пар ключ-значение
    std::unordered_multimap<int, std::string> ump3 = {{2, "Apple"}, {4, "Pear"}}; // Тоже самое
    std::unordered_multimap ump4(ump3);   // Конструктор копирования (ump4 независимая копия ump3)
    std::unordered_multimap ump5 = ump3; // Конструктор присваивания (ump5 независимая копия ump3)

    ump4.insert({3, "Cherry"});    // Добавление элемента
    ump5.insert({{3, "Cherry"}, {5, "Peach"}});    // Добавление 2х элементов
    ump5.erase(2);        // Удаление элемента с ключом 2

    for(auto& i : ump3){ // Перебор элементов
        std::cout << i.first << "=>" << i.second << ", ";   //4=>Pear, 2=>Apple,      Элементы не сортируются
    }
    std::cout << std::endl;
    for(auto& i : ump5){ // Перебор элементов
        std::cout << i.first << "=>" << i.second << ", ";   //5=>Peach, 3=>Cherry, 4=>Pear,
    }
}
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 - вектор (массив) значений с изменяемым размером.