Поделиться через


Класс `concurrent_unordered_map`

Класс concurrent_unordered_map представляет собой безопасный в отношении параллелизма контейнер, управляющий последовательностью элементов типа std::pair<const K, _Element_type> переменной длины. Последовательность представлена таким образом, что позволяет параллельно-безопасно выполнять операции присоединения, получения доступа к элементу, доступа к итератору и обхода итератора. Здесь "безопасность для параллелизма" означает, что указатели или итераторы всегда допустимы. Это не гарантия инициализации элементов или определенного порядка обхода.

Синтаксис

template <typename K,
    typename _Element_type,
    typename _Hasher = std::hash<K>,
    typename key_equality = std::equal_to<K>,
    typename _Allocator_type = std::allocator<std::pair<const K, _Element_type>>>
class concurrent_unordered_map : public details::_Concurrent_hash<details::_Concurrent_unordered_map_traits<K, _Element_type, details::_Hash_compare<K, _Hasher, key_equality>, _Allocator_type, false>>;

Параметры

K
Тип ключа.

_Element_type
Сопоставленный тип.

_Хешер
Тип объекта хэш-функции. Этот аргумент является необязательным, и значением по умолчанию является std::hash<K>.

ключевое_равенство
Тип объекта функции сравнения на предмет равенства. Этот аргумент является необязательным, и значением по умолчанию является std::equal_to<K>.

_Allocator_type
Тип, представляющий сохраненный объект распределителя, инкапсулирующий сведения о выделении и освобождении памяти для параллельной неупорядоченной карты. Этот аргумент является необязательным, и в качестве значения по умолчанию используется std::allocator<std::pair<K,_Element_type>>.

Участники

Общедоступные typedefы

Имя Описание
allocator_type Тип распределителя для управления хранилищем.
const_iterator Тип постоянного итератора для управляемой последовательности.
const_local_iterator Тип итератора константного контейнера для контролируемой последовательности.
const_pointer Тип постоянного указателя на элемент.
const_reference Тип постоянной ссылки на элемент.
difference_type Тип расстояния со знаком между двумя элементами.
hasher Тип хэш-функции.
iterator Тип итератора для управляемой последовательности.
key_equal Тип функции сравнения.
key_type Тип ключа упорядочения.
local_iterator Тип итератора кучи для управляемой последовательности.
mapped_type Тип сопоставленного значения, связанного с каждым ключом.
pointer Тип указателя на элемент.
reference Тип ссылки на элемент.
size_type Тип беззнакового расстояния между двумя элементами.
value_type Тип элемента.

Открытые конструкторы

Имя Описание
concurrent_unordered_map Перегружен. Создает параллельную неупорядоченную карту.

Открытые методы

Имя Описание
у Перегружен. Находит элемент в concurrent_unordered_map с указанным значением ключа. Этот метод является безопасным для параллелизма.
hash_function Получает сохраненный объект хэш-функции.
вставка Перегружен. Добавляет элементы в concurrent_unordered_map объект.
key_eq Возвращает сохраненный объект функции сравнения равенства.
обменивать Меняет местами содержимое двух concurrent_unordered_map объектов. Этот метод не является безопасным для параллелизма.
небезопасное_удаление Перегружен. Удаляет элементы из concurrent_unordered_map на указанных позициях. Этот метод не является безопасным для параллелизма.

Открытые операторы

Имя Описание
оператор[] Перегружен. Находит или вставляет элемент с указанным ключом. Этот метод является безопасным для параллелизма.
оператор = Перегружен. Назначает содержимое другого concurrent_unordered_map объекта этому объекту. Этот метод не является безопасным для параллелизма.

Замечания

Подробные сведения о классе см. в разделе "Параллельные concurrent_unordered_map контейнеры и объекты".

Иерархия наследования

_Traits

_Concurrent_hash

concurrent_unordered_map

Требования

Заголовок: concurrent_unordered_map.h

Пространство имен: конкурентность

в

Находит элемент в concurrent_unordered_map с указанным значением ключа. Этот метод является безопасным для параллелизма.

mapped_type& at(const key_type& KVal);

const mapped_type& at(const key_type& KVal) const;

Параметры

KVal
Значение ключа, которое необходимо найти.

Возвращаемое значение

Ссылка на значение данных найденного элемента.

Замечания

Если значение ключа аргумента не найдено, функция создает объект класса out_of_range.

начинать

Возвращает итератор, указывающий на первый элемент в параллельном контейнере. Данный метод безопасен в режиме параллелизма.

iterator begin();

const_iterator begin() const;

Возвращаемое значение

Итератор к первому элементу в параллельном контейнере.

cbegin

Возвращает итератор const, указывающий на первый элемент в параллельном контейнере. Данный метод безопасен в режиме параллелизма.

const_iterator cbegin() const;

Возвращаемое значение

Константный итератор к первому элементу в параллельном контейнере.

cend

Возвращает константный итератор, указывающий на позицию, следующую за последним элементом в параллельном контейнере. Данный метод безопасен в режиме параллелизма.

const_iterator cend() const;

Возвращаемое значение

Константный итератор на позицию после последнего элемента в параллельном контейнере.

очистить

Удаляет все элементы в параллельном контейнере. Эта функция не является потокобезопасной.

void clear();

concurrent_unordered_map

Создает параллельную неупорядоченную карту.

explicit concurrent_unordered_map(
    size_type _Number_of_buckets = 8,
    const hasher& _Hasher = hasher(),
    const key_equal& key_equality = key_equal(),
    const allocator_type& _Allocator = allocator_type());

concurrent_unordered_map(
    const allocator_type& _Allocator);

template <typename _Iterator>
concurrent_unordered_map(_Iterator _Begin,
    _Iterator _End,
    size_type _Number_of_buckets = 8,
    const hasher& _Hasher = hasher(),
    const key_equal& key_equality = key_equal(),
    const allocator_type& _Allocator = allocator_type());

concurrent_unordered_map(
    const concurrent_unordered_map& _Umap);

concurrent_unordered_map(
    const concurrent_unordered_map& _Umap,
    const allocator_type& _Allocator);

concurrent_unordered_map(
    concurrent_unordered_map&& _Umap);

Параметры

_Итератор
Тип итератора ввода.

_Количество_корзин
Начальное число контейнеров для этой неупорядоченной карты.

_Хешер
Хэш-функция для этой неупорядоченной карты.

ключевое_равенство
Функция сравнения равенства для этой неупорядоченной карты.

_Аллокатор
Распределитель для этой неупорядоченной карты.

_Начинать
Положение первого элемента в диапазоне копируемых элементов.

_Конец
Позиция первого элемента за пределами диапазона копируемых элементов.

_Umap
Исходный объект concurrent_unordered_map для копирования или перемещения элементов.

Замечания

Все конструкторы хранят объект _Allocator распределителя и инициализирует неупорядоченную карту.

Первый конструктор задает пустую начальную карту и явным образом указывает количество контейнеров, хэш-функции, функции равенства и типа распределителя, используемого.

Второй конструктор задает распределитель для неупорядоченной карты.

Третий конструктор задает значения, предоставленные диапазоном итератора [ _Begin, ). _End

Четвертый и пятый конструкторы указывают копию параллельной неупорядоченной карты _Umap.

Последний конструктор задает перемещение параллельной неупорядоченной карты _Umap.

подсчет

Подсчитывает количество элементов, соответствующих указанному ключу. Эта функция безопасна для многопоточности.

size_type count(const key_type& KVal) const;

Параметры

KVal
Ключ для поиска.

Возвращаемое значение

Количество раз, когда ключ отображается в контейнере.

пусто

Проверяет отсутствие элементов. Данный метод безопасен в режиме параллелизма.

bool empty() const;

Возвращаемое значение

true если параллельный контейнер пуст, false в противном случае.

Замечания

В условиях параллельных вставок, состояние пустоты параллельного контейнера может измениться сразу после вызова этой функции, еще до того, как будет считано возвращаемое значение.

конец

Возвращает итератор, указывающий на позицию, следующую за последним элементом в параллельном контейнере. Данный метод безопасен в режиме параллелизма.

iterator end();

const_iterator end() const;

Возвращаемое значение

Итератор на позицию за последним элементом параллельного контейнера.

равный_диапазон

Находит диапазон, соответствующий указанному ключу. Эта функция безопасна для многопоточности.

std::pair<iterator,
    iterator> equal_range(
    const key_type& KVal);

std::pair<const_iterator,
    const_iterator> equal_range(
    const key_type& KVal) const;

Параметры

KVal
Ключевое значение для поиска.

Возвращаемое значение

Пара, в которой первый элемент является итератором в начале, а второй — итератором в конце диапазона.

Замечания

Одновременные вставки могут привести к добавлению дополнительных ключей между начальным и конечным итераторами.

поиск

Определяет элемент, соответствующий указанному ключу. Эта функция безопасна для многопоточности.

iterator find(const key_type& KVal);

const_iterator find(const key_type& KVal) const;

Параметры

KVal
Ключевое значение для поиска.

Возвращаемое значение

Итератор, указывающий на расположение первого элемента, соответствующего предоставленному ключу, или итератор end() , если такой элемент отсутствует.

get_allocator

Возвращает сохраненный объект распределения памяти для этого параллельного контейнера. Данный метод безопасен в режиме параллелизма.

allocator_type get_allocator() const;

Возвращаемое значение

Запоминаемый объект аллокатора для этого параллельного контейнера.

** хеш-функция

Получает сохраненный объект хэш-функции.

hasher hash_function() const;

Возвращаемое значение

Сохраненный объект хэш-функции.

Вставить

Добавляет элементы в concurrent_unordered_map объект.

std::pair<iterator,
    bool> insert(
    const value_type& value);

iterator insert(
    const_iterator _Where,
    const value_type& value);

template<class _Iterator>
void insert(_Iterator first,
    _Iterator last);

template<class V>
std::pair<iterator,
    bool> insert(
    V&& value);

template<class V>
typename std::enable_if<!std::is_same<const_iterator,
    typename std::remove_reference<V>::type>::value,
    iterator>::type insert(
    const_iterator _Where,
    V&& value);

Параметры

_Итератор
Тип итератора, используемый для вставки.

V
Тип значения, вставленного в карту.

значение
Вставленное значение.

_Где
Начальное расположение для поиска точки вставки.

первый
Начало диапазона для вставки.

последний
Конец диапазона для вставки.

Возвращаемое значение

Пара, содержащая итератор и логическое значение. Дополнительные сведения см. в разделе "Примечания".

Замечания

Первая функция-член определяет, существует ли элемент X в последовательности, ключ которого имеет эквивалентное упорядочивание с ключом value. Если нет, он создает элемент X и инициализирует его при помощи value. Затем функция определяет итератор where , указывающий X. Если произошла вставка, функция возвращается std::pair(where, true). В противном случае возвращается значение std::pair(where, false).

Вторая функция-член возвращает insert(value), используя _Where в качестве начального места в управляемой последовательности для поиска точки вставки.

Третья функция-член вставляет последовательность значений элементов из диапазона [ first, ). last

Последние две функции-члены ведут себя так же, как и первые два, за исключением того, что value используется для создания вставленного значения.

key_eq

Возвращает сохраненный объект функции сравнения равенства.

key_equal key_eq() const;

Возвращаемое значение

Сохраненный объект функции сравнения равенства.

фактор загрузки

Вычисляет и возвращает текущий коэффициент нагрузки контейнера. Коэффициент нагрузки — это количество элементов в контейнере, разделенное на количество контейнеров.

float load_factor() const;

Возвращаемое значение

Коэффициент загрузки контейнера.

max_load_factor

Возвращает или задает максимальный коэффициент нагрузки контейнера. Максимальный коэффициент нагрузки — это наибольшее количество элементов, которое может находиться в любой корзине перед увеличением внутренней таблицы контейнера.

float max_load_factor() const;

void max_load_factor(float _Newmax);

Параметры

_Newmax

Возвращаемое значение

Первая функция-член возвращает сохраненный коэффициент максимальной нагрузки. Вторая функция-член не возвращает значение, но создает исключение out_of_range, если указанный фактор нагрузки недопустим.

максимальный_размер

Возвращает максимальный размер параллельного контейнера, определяемого распределителем. Данный метод безопасен в режиме параллелизма.

size_type max_size() const;

Возвращаемое значение

Максимальное количество элементов, которые можно вставить в этот параллельный контейнер.

Замечания

Это значение верхней границы может быть выше, чем то, что контейнер может на самом деле хранить.

оператор[]

Находит или вставляет элемент с указанным ключом. Этот метод является безопасным для параллелизма.

mapped_type& operator[](const key_type& kval);

mapped_type& operator[](key_type&& kval);

Параметры

KVal
Значение ключа для

найти или вставить.

Возвращаемое значение

Ссылка на значение данных найденного или вставленного элемента.

Замечания

Если значение ключа аргумента не найдено, он вставляется вместе со значением по умолчанию для такого типа данных.

operator[] можно использовать для вставки элементов в отображение m с помощью m[key] = DataValue;, где DataValue — значение mapped_type элемента, у которого ключ равен key.

При использовании operator[] для вставки элементов возвращаемая ссылка не отображает, меняет ли вставка уже существующий элемент или создает новый. Функции-члены find и вставка можно использовать для определения того, присутствует ли элемент с указанным ключом перед вставкой.

operator=

Назначает содержимое другого concurrent_unordered_map объекта этому объекту. Этот метод не является безопасным для параллелизма.

concurrent_unordered_map& operator= (const concurrent_unordered_map& _Umap);

concurrent_unordered_map& operator= (concurrent_unordered_map&& _Umap);

Параметры

_Umap
Исходный объект concurrent_unordered_map.

Возвращаемое значение

Ссылка на этот concurrent_unordered_map объект.

Замечания

После удаления всех существующих элементов в параллельном векторе operator= либо копирует, либо перемещает содержимое _Umap в параллельный вектор.

Переделывать

Повторно создает хэш-таблицу.

void rehash(size_type _Buckets);

Параметры

_Ведра
Требуемое количество контейнеров.

Замечания

Функция-член изменяет количество ведер до значения не менее _Buckets и при необходимости перестраивает хэш-таблицу. Количество контейнеров должно быть 2. Если число не является степенью двойки, оно будет округлено до следующей наибольшей степени двойки.

Он создает исключение out_of_range , если число контейнеров недопустимо (0 или больше максимального числа контейнеров).

размер

Возвращает число элементов в этом параллельном контейнере. Данный метод безопасен в режиме параллелизма.

size_type size() const;

Возвращаемое значение

Число элементов в контейнере.

Замечания

При наличии параллельных вставок число элементов в параллельном контейнере может измениться сразу после вызова этой функции даже до чтения возвращаемого значения.

замена

Меняет местами содержимое двух concurrent_unordered_map объектов. Этот метод не является безопасным для параллелизма.

void swap(concurrent_unordered_map& _Umap);

Параметры

_Umap
Объект concurrent_unordered_map для обмена.

unsafe_begin

Возвращает итератор к первому элементу в этом контейнере для определённого сегмента.

local_iterator unsafe_begin(size_type _Bucket);

const_local_iterator unsafe_begin(size_type _Bucket) const;

Параметры

_Ведро
Индекс контейнера.

Возвращаемое значение

Итератор, указывающий на начало контейнера.

небезопасное_ведро

Возвращает индекс контейнера, с которым сопоставляется определенный ключ в этом контейнере.

size_type unsafe_bucket(const key_type& KVal) const;

Параметры

KVal
Ключ элемента, который ищут.

Возвращаемое значение

Индекс корзины для ключа в этом контейнере.

unsafe_bucket_count

Возвращает текущее количество контейнеров в этом контейнере.

size_type unsafe_bucket_count() const;

Возвращаемое значение

Текущее количество ведер в этом контейнере.

небезопасный_размер_корзины

Возвращает количество элементов в определенном контейнере этого контейнера.

size_type unsafe_bucket_size(size_type _Bucket);

Параметры

_Ведро
Корзина для поиска.

Возвращаемое значение

Текущее количество ведер в этом контейнере.

unsafe_cbegin

Возвращает итератор к первому элементу в этом контейнере для определённого сегмента.

const_local_iterator unsafe_cbegin(size_type _Bucket) const;

Параметры

_Ведро
Индекс контейнера.

Возвращаемое значение

Итератор, указывающий на начало контейнера.

unsafe_cend

Возвращает итератор на позицию, следующую за последним элементом в определенном бакете.

const_local_iterator unsafe_cend(size_type _Bucket) const;

Параметры

_Ведро
Индекс контейнера.

Возвращаемое значение

Итератор, указывающий на начало контейнера.

небезопасный_конец

Возвращает итератор к последнему элементу этого контейнера для определенного контейнера.

local_iterator unsafe_end(size_type _Bucket);

const_local_iterator unsafe_end(size_type _Bucket) const;

Параметры

_Ведро
Индекс контейнера.

Возвращаемое значение

Итератор, указывающий на конец контейнера.

небезопасное_удаление

Удаляет элементы из concurrent_unordered_map на указанных позициях. Этот метод не является безопасным для параллелизма.

iterator unsafe_erase(
    const_iterator _Where);

iterator unsafe_erase(
    const_iterator _Begin,
    const_iterator _End);

size_type unsafe_erase(
    const key_type& KVal);

Параметры

_Где
Положение итератора для удаления.

_Начинать
Положение первого элемента в диапазоне элементов для удаления.

_Конец
Положение первого элемента за пределами диапазона элементов для удаления.

KVal
Ключ, который нужно удалить.

Возвращаемое значение

Первые две функции-члена возвращают итератор, который обозначает первый элемент, находящийся за всеми удаленными элементами, или concurrent_unordered_map::end(), если такой элемент не существует. Третья функция-член возвращает число элементов, которые она удаляет.

Замечания

Первая функция-член удаляет элемент управляемой последовательности, указанный параметром _Where. Вторая функция-член удаляет элементы в диапазоне [ _Begin, ). _End

Третья функция-член удаляет элементы в диапазоне, определяемом concurrent_unordered_map::equal_rangeKVal.

unsafe_max_bucket_count

Возвращает максимальное количество корзин в этом контейнере.

size_type unsafe_max_bucket_count() const;

Возвращаемое значение

Максимальное количество корзин в этом контейнере.

См. также

Пространство имен параллелизм
Параллельные контейнеры и объекты