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