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

- multimap или неуникальный словарь это контейнер для упорядоченного хранения пары (ключ, значение). Подключается через #include <map>;

- Сортировка происходит по ключу.

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

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

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

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

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

МетодОписаниеПримерСложность
begin() Возвращает итератор на первый элемент. cout << mmp.begin()->second; O(1)
clear() Удаляет все элементы multimap. mmp.clear(); O(n)
count(const key_type& k) Возвращает количество элементов с заданным ключом size_t cnt = mmp.count("hoba"); O(1)
emplace(key_type k, value_type value) Вставляет значение пару ключ-значение в multimap. mmp.emplace(9, "nine"); O(logN)
emplace_hint(iterator it, key_type k, value_type value) Вставляет значение пару ключ-значение перед итератором map. При совпадении ключа значение не меняется. mmp.emplace_hint(mmp.end(), 9, "nine"); O(1)
O(logN)
empty() Возвращает пустой ли multimap. if(!mmp.empty()); O(1)
end() Возвращает итератор на место после последнего элемента. auto i = mmp.end(); O(1)
erase(const key_type& k) Удаляет элемент с заданным ключом. mmp.erase(3); O(logN)
erase(iterator pos) Удаляет элемент с заданным итератором. mmp.erase(mmp.begin()); O(1)
erase(iterator it_begin, iterator it_end) Удаляет элементы в заданном диапазоне итераторов. mmp.erase(++mmp.begin(), mmp.end()); O(n)
find() Возвращает итератор на элемент по ключу или std::end(). auto it = mmp.find(5); O(1)
insert(const std::pair& val) Вставляет элемент. Если ключ уже существует - значение не меняется. mmp.insert({2, "two"}); O(logN)
insert(iterator it_begin, iterator it_end) Вставляет элементы из диапазона итераторов. mmp.insert(mmp1.begin(), mmp1.end()); O(logN)
key_comp() Возвращает функцию возвращающую arg1 < arg2 auto mmp_func = mmp.key_comp(); O(1)
lower_bound(const T& value) Возвращает итератор на элемент с ключом больше или равный value или ms.end() auto it = mmp.lower_bound(30); O(logN)
max_size() Возвращает максимально возможный (текущий) размер массива. size_t msize = mmp.max_size(); //128102389400760775 O(1)
multimap Конструктор без аргументов. Создает новый пустой multimap. multimap<int, string> mmp; O(1)
multimap(initializer_list<value_type> il) Конструктор. Создает multimap из списка инициализации. multimap<int, string> mmp{{5, "ara"}, {3, "dog"}, {1, "cat"}}; O(n)
multimap(iterator it_start, iterator it_stop) Конструктор. Создает multimap из диапазона итераторов другого контейнера. multimap mmp1(++mmp.begin(), mmp.end()); O(n)
multimap(const multimap mmp) Конструктор копирования. Создает multimap со значениями mmp multimap mmp1(mmp);
multimap<int, string> mmp1(mmp);
O(n)
rbegin() Возвращает реверсивный итератор на конец multimap. auto i = mmp.rbegin(); O(1)
rend() Возвращает реверсивный итератор на начало multimap. auto i = mmp.rend(); O(1)
size() Возвращает размер multimap. size_t sz = mmp.size(); O(1)
swap(multimap& mmp1) Обменивает содержимое mapов mmp.swap(mmp1); O(1)
upper_bound(const Key& key ); Возвращает итератор на элемент с ключом больше (>) аргумента, или end() при отсутствии. auto it = mmp.upper_bound(3); O(logN)
value_comp() Возвращает функцию возвращающую arg1 < arg2 auto mmp_func = mmp.value_comp(); O(1)

#include <iostream> // cout
#include <map>      // multimap

int main(){
    std::multimap<int, std::string> mmp1; // Конструктор пустого multimap
    std::multimap<int, std::string> mmp2{{3, "three"},  {1, "one"}}; // Конструктор с инициализацией
    std::multimap mmp3(mmp2);   // Конструктор копирования
    std::multimap mmp4 = mmp3;  // Конструктор присваивания

    mmp4.emplace(2, "two"); // mmp4 = {{1, "one"}, {2, "two"}, {3, "three"}}
    size_t sz = mmp4.size(); // sz = 3
    auto it = ++mmp4.begin(); // Итератор на второй элемент
    std::cout << it->first << " => " << it->second << "\n"; //2 => two

    for(auto& i : mmp4){ // Перебираем multimap
        std::cout << i.first << "=>" << i.second << ", ";   //1=>one, 2=>two, 3=>three,
    }
}
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 - вектор (массив) значений с изменяемым размером.