- 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,
}
}