- 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";
}
}