std::unordered_map
— это ассоциативный контейнер, содержащий пары ключ-значение с уникальными ключами. Поиск, вставка и удаление элементов имеют в среднем постоянную временную сложность.
Внутренне элементы не отсортированы в каком-либо определенном порядке, а организованы в сегменты (buckets). В какой сегмент помещается элемент, полностью зависит от хеша его ключа. Ключи с одинаковым хеш-кодом появляются в одном сегменте. Это обеспечивает быстрый доступ к отдельным элементам, поскольку после вычисления хеша он ссылается на сегмент, содержащий элемент.
Два ключа считаются
эквивалентными
если предикат сравнения ключей отображения возвращает true при передаче этих ключей. Если два ключа эквивалентны, хеш-функция должна возвращать одинаковое значение для обоих ключей.
Все функции-члены
std::unordered_map
являются
constexpr
: возможно создавать и использовать объекты
std::unordered_map
при вычислении константного выражения.
Однако, объекты
std::unordered_map
обычно не могут быть
constexpr
, поскольку любая динамически выделенная память должна быть освобождена в том же вычислении константного выражения.
Функции swap не делают недействительными ни один из итераторов внутри контейнера, но они делают недействительным итератор, отмечающий конец области обмена.
Ссылки и указатели на ключ или данные, хранящиеся в контейнере, становятся недействительными только при удалении этого элемента, даже если соответствующий итератор становится недействительным.
Параметры шаблона
Этот раздел не завершён
Причина: Добавьте описания параметров шаблона.
Типы-члены
Тип
Определение
key_type
Key
mapped_type
T
value_type
std::pair<constKey,T>
size_type
беззнаковый целочисленный тип (обычно std::size_t)
difference_type
знаковый целочисленный тип (обычно std::ptrdiff_t)
тип итератора, чьи типы категории, значения, разности, указателя и типы ссылки совпадают с iterator. Этот итератор может использоваться для перебора одной корзины, но не между корзинами
const_local_iterator
тип итератора, чьи типы категории, значения, разности, указателя и типы ссылки совпадают с const_iterator. Этот итератор может использоваться для перебора одной корзины, но не между корзинами
#include <iostream>#include <string>#include <unordered_map>int main(){// Создать unordered_map из трех строк (которые отображаются в строки)
std::unordered_map<std::string, std::string> u ={{"RED", "#FF0000"},
{"GREEN", "#00FF00"},
{"BLUE", "#0000FF"}};// Вспомогательная лямбда-функция для вывода пар ключ-значениеauto print_key_value =[](constauto& key, constauto& value){std::cout<<"Key:["<< key <<"] Value:["<< value <<"]\n";};std::cout<<"Итерация и вывод пар ключ-значение unordered_map, явно\n""указывая их типы:\n";for(conststd::pair<conststd::string, std::string>& n : u)
print_key_value(n.first, n.second);std::cout<<"\nИтерация и вывод пар ключ-значение с использованием структурированных привязок C++17:\n";for(constauto&[key, value]: u)
print_key_value(key, value);// Добавить две новые записи в unordered_map
u["BLACK"]="#000000";
u["WHITE"]="#FFFFFF";std::cout<<"\nВывод значений по ключу:\n""HEX цвета RED:["<< u["RED"]<<"]\n""HEX цвета BLACK:["<< u["BLACK"]<<"]\n\n";std::cout<<"Использование operator[] с несуществующим ключом для вставки новой пары ключ-значение:\n";
print_key_value("new_key", u["new_key"]);std::cout<<"\nИтерация и вывод пар ключ-значение с использованием `auto`;\n""new_key теперь один из ключей в map:\n";for(constauto& n : u)
print_key_value(n.first, n.second);}
Возможный вывод:
Итерация и вывод пар ключ-значение unordered_map, явно
указывая их типы:
Key:[BLUE] Value:[#0000FF]
Key:[GREEN] Value:[#00FF00]
Key:[RED] Value:[#FF0000]
Итерация и вывод пар ключ-значение с использованием структурированных привязок C++17:
Key:[BLUE] Value:[#0000FF]
Key:[GREEN] Value:[#00FF00]
Key:[RED] Value:[#FF0000]
Вывод значений по ключу:
HEX цвета RED:[#FF0000]
HEX цвета BLACK:[#000000]
Использование operator[] с несуществующим ключом для вставки новой пары ключ-значение:
Key:[new_key] Value:[]
Итерация и вывод пар ключ-значение с использованием `auto`;
new_key теперь один из ключей в map:
Key:[new_key] Value:[]
Key:[WHITE] Value:[#FFFFFF]
Key:[BLACK] Value:[#000000]
Key:[BLUE] Value:[#0000FF]
Key:[GREEN] Value:[#00FF00]
Key:[RED] Value:[#FF0000]
Отчёты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.