Класс concurrent_unordered_multimap
Класс concurrent_unordered_multimap
представляет собой безопасный в отношении параллелизма контейнер, управляющий последовательностью элементов типа 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>>
>,
typename key_equality = std::equal_to<K>,
typename _Allocator_type = std::allocator<std::pair<const K,
_Element_type>>> class concurrent_unordered_multimap : public details::_Concurrent_hash<details::_Concurrent_unordered_map_traits<K,
_Element_type,
details::_Hash_compare<K,
_Hasher,
key_equality>,
_Allocator_type,
true>>;
Параметры
K
Тип ключа.
_Element_type
Сопоставленный тип.
_Домработника
Тип объекта хэш-функции. Этот аргумент является необязательным, и значением по умолчанию является std::hash<K>
.
key_equality
Тип объекта функции сравнения на предмет равенства. Этот аргумент является необязательным, и значением по умолчанию является std::equal_to<K>
.
_Allocator_type
Тип, представляющий сохраненный объект распределителя, инкапсулирующий сведения о выделении и размещении памяти для параллельного вектора. Этот аргумент является необязательным, и в качестве значения по умолчанию используется std::allocator<std::pair<K
,_Element_type>>
.
Участники
Общедоступные определения типов
Имя | Описание |
---|---|
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_multimap | Перегружен. Создает параллельное неупорядоченное мультисопоставление. |
Открытые методы
Имя | Описание |
---|---|
hash_function | Возвращает сохраненный объект хэш-функции. |
insert | Перегружен. Добавляет элементы в concurrent_unordered_multimap объект. |
key_eq | Возвращает сохраненный объект функции сравнения равенства. |
swap | Переключает содержимое двух concurrent_unordered_multimap объектов. Этот метод не является безопасным для параллелизма. |
unsafe_erase | Перегружен. Удаляет элементы из указанных позиций concurrent_unordered_multimap . Этот метод не является безопасным для параллелизма. |
Открытые операторы
Имя | Описание |
---|---|
operator= | Перегружен. Назначает содержимое другого concurrent_unordered_multimap объекта этому объекту. Этот метод не является безопасным для параллелизма. |
Замечания
Подробные сведения о классе см. в разделе "Параллельные concurrent_unordered_multimap
контейнеры и объекты".
Иерархия наследования
_Traits
_Concurrent_hash
concurrent_unordered_multimap
Требования
Заголовок: concurrent_unordered_map.h
Пространство имен: concurrency
begin
Возвращает итератор, указывающий на первый элемент в параллельном контейнере. Данный метод безопасен в режиме параллелизма.
iterator begin();
const_iterator begin() const;
Возвращаемое значение
Итератор к первому элементу в параллельном контейнере.
cbegin
Возвращает итератор const, указывающий на первый элемент в параллельном контейнере. Данный метод безопасен в режиме параллелизма.
const_iterator cbegin() const;
Возвращаемое значение
Константный итератор к первому элементу в параллельном контейнере.
cend
Возвращает итератор const, указывающий на расположение, успешное выполнение последнего элемента в параллельном контейнере. Данный метод безопасен в режиме параллелизма.
const_iterator cend() const;
Возвращаемое значение
Константный итератор в расположении, успешном последнем элементе в параллельном контейнере.
clear
Удаляет все элементы в параллельном контейнере. Эта функция не является безопасной.
void clear();
concurrent_unordered_multimap
Создает параллельное неупорядоченное мультисопоставление.
explicit concurrent_unordered_multimap(
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_multimap(
const allocator_type& _Allocator);
template <typename _Iterator>
concurrent_unordered_multimap(_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_multimap(
const concurrent_unordered_multimap& _Umap);
concurrent_unordered_multimap(
const concurrent_unordered_multimap& _Umap,
const allocator_type& _Allocator);
concurrent_unordered_multimap(
concurrent_unordered_multimap&& _Umap);
Параметры
_Итератор
Тип итератора ввода.
_Number_of_buckets
Начальное число блоков этого неупорядоченного мультисопоставления.
_Домработника
Хэш-функция для этого неупорядоченного мультисопоставления.
key_equality
Функция сравнения на равенство для этого неупорядоченного мультисопоставления.
_Распределителя
Распределитель для этого неупорядоченного мультисопоставления.
_Начинать
Положение первого элемента в диапазоне копируемых элементов.
_Конец
Положение первого элемента после диапазона копируемых элементов.
_Umap
Исходный concurrent_unordered_multimap
объект для копирования элементов из.
Замечания
Все конструкторы содержат объект распределителя _Allocator
и инициализируют неупорядоченное мультисопоставление.
Первый конструктор определяет изначально пустое мультисопоставление и явно задает число блоков, хэш-функцию, функцию равенства и тип распределителя, которые будут использоваться.
Второй конструктор определяет распределитель для неупорядоченного мультисопоставления.
Третий конструктор задает значения, предоставленные диапазоном итератора [ _Begin
, ). _End
Четвертый и пятый конструкторы определяют копию параллельного неупорядоченного мультисопоставления _Umap
.
Последний конструктор определяет перемещение параллельного неупорядоченного мультисопоставления _Umap
.
count
Подсчитывает количество элементов, соответствующих указанному ключу. Эта функция безопасна для параллелизма.
size_type count(const key_type& KVal) const;
Параметры
KVal
Ключ, который нужно найти.
Возвращаемое значение
Количество раз, когда ключ отображается в контейнере.
empty
Проверяет отсутствие элементов. Данный метод безопасен в режиме параллелизма.
bool empty() const;
Возвращаемое значение
true
Значение , если параллельный контейнер пуст, false
в противном случае.
Замечания
При наличии параллельных вставок, может ли одновременный контейнер быть пустым сразу после вызова этой функции, прежде чем возвращаемое значение даже считывается.
end
Возвращает итератор, указывающий на расположение, успешное последнее элемент в параллельном контейнере. Данный метод безопасен в режиме параллелизма.
iterator end();
const_iterator end() const;
Возвращаемое значение
Итератор в расположении, успешном последнем элементе в параллельном контейнере.
equal_range
Находит диапазон, соответствующий указанному ключу. Эта функция безопасна для параллелизма.
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;
Возвращаемое значение
Хранимый объект распределителя для этого параллельного контейнера.
hash_function
Возвращает сохраненный объект хэш-функции.
hasher hash_function() const;
Возвращаемое значение
Сохраненный объект хэш-функции.
Вставить
Добавляет элементы в concurrent_unordered_multimap
объект.
iterator 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>
iterator 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
Тип значения, вставленного в карту.
значение
Вставленное значение.
_Где
Начальное расположение для поиска точки вставки.
first
Начало вставки диапазона.
last
Конец диапазона для вставки.
Возвращаемое значение
Итератор, указывающий на расположение вставки.
Замечания
Первая функция-член вставляет элемент value
в контролируемую последовательность, а затем возвращает итератор, указывающий вставленный элемент.
Вторая функция-член возвращает insert( value
), используя _Where
в качестве начального места в управляемой последовательности для поиска точки вставки.
Третья функция-член вставляет последовательность значений элементов из диапазона [ first
, ). last
Последние две функции-члены ведут себя так же, как и первые два, за исключением того, что value
используется для создания вставленного значения.
key_eq
Возвращает сохраненный объект функции сравнения равенства.
key_equal key_eq() const;
Возвращаемое значение
Сохраненный объект функции сравнения равенства.
load_factor
Вычисляет и возвращает текущий коэффициент нагрузки контейнера. Коэффициент нагрузки — это количество элементов в контейнере, разделенное на количество контейнеров.
float load_factor() const;
Возвращаемое значение
Коэффициент загрузки контейнера.
max_load_factor
Возвращает или задает максимальный коэффициент нагрузки контейнера. Максимальный коэффициент нагрузки — это наибольшее количество элементов, чем может находиться в любом контейнере до роста внутренней таблицы контейнера.
float max_load_factor() const;
void max_load_factor(float _Newmax);
Параметры
_Newmax
Возвращаемое значение
Первая функция-член возвращает сохраненный коэффициент максимальной нагрузки. Вторая функция-член не возвращает значение, но создает исключение out_of_range , если указанный фактор загрузки недопустим..
max_size
Возвращает максимальный размер параллельного контейнера, определяемого распределителем. Данный метод безопасен в режиме параллелизма.
size_type max_size() const;
Возвращаемое значение
Максимальное количество элементов, которые можно вставить в этот параллельный контейнер.
Замечания
Это значение верхней границы может быть выше, чем то, что контейнер может на самом деле хранить.
operator=
Назначает содержимое другого concurrent_unordered_multimap
объекта этому объекту. Этот метод не является безопасным для параллелизма.
concurrent_unordered_multimap& operator= (const concurrent_unordered_multimap& _Umap);
concurrent_unordered_multimap& operator= (concurrent_unordered_multimap&& _Umap);
Параметры
_Umap
Исходный объект concurrent_unordered_multimap
.
Возвращаемое значение
Ссылка на этот concurrent_unordered_multimap
объект.
Замечания
После удаления каких-либо существующих элементов из параллельного неупорядоченного контейнера multimap operator=
либо копирует, либо перемещает содержимое _Umap
в параллельный неупорядоченный контейнер multimap.
Переделывать
Повторно создает хэш-таблицу.
void rehash(size_type _Buckets);
Параметры
_Ведра
Требуемое количество контейнеров.
Замечания
Функция-член устанавливает число сегментов не менее _Buckets
и при необходимости перестраивает хэш-таблицу. Количество контейнеров должно быть 2. Если не мощность 2, она будет округлена до следующей наибольшей мощности 2.
Он создает исключение out_of_range , если число контейнеров недопустимо (0 или больше максимального числа контейнеров).
size
Возвращает число элементов в этом параллельном контейнере. Данный метод безопасен в режиме параллелизма.
size_type size() const;
Возвращаемое значение
Число элементов в контейнере.
Замечания
При наличии параллельных вставок число элементов в параллельном контейнере может измениться сразу после вызова этой функции даже до чтения возвращаемого значения.
swap
Переключает содержимое двух concurrent_unordered_multimap
объектов. Этот метод не является безопасным для параллелизма.
void swap(concurrent_unordered_multimap& _Umap);
Параметры
_Umap
Объект concurrent_unordered_multimap
для обмена.
unsafe_begin
Возвращает итератор первому элементу в этом контейнере для определенного контейнера.
local_iterator unsafe_begin(size_type _Bucket);
const_local_iterator unsafe_begin(size_type _Bucket) const;
Параметры
_Ведро
Индекс контейнера.
Возвращаемое значение
Итератор, указывающий на начало контейнера.
unsafe_bucket
Возвращает индекс контейнера, с которым сопоставляется определенный ключ в этом контейнере.
size_type unsafe_bucket(const key_type& KVal) const;
Параметры
KVal
Ключ элемента, на который выполняется поиск.
Возвращаемое значение
Индекс контейнера для ключа в этом контейнере.
unsafe_bucket_count
Возвращает текущее количество контейнеров в этом контейнере.
size_type unsafe_bucket_count() const;
Возвращаемое значение
Текущее количество контейнеров в этом контейнере.
unsafe_bucket_size
Возвращает количество элементов в определенном контейнере этого контейнера.
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;
Параметры
_Ведро
Индекс контейнера.
Возвращаемое значение
Итератор, указывающий на начало контейнера.
unsafe_end
Возвращает итератор к последнему элементу этого контейнера для определенного контейнера.
local_iterator unsafe_end(size_type _Bucket);
const_local_iterator unsafe_end(size_type _Bucket) const;
Параметры
_Ведро
Индекс контейнера.
Возвращаемое значение
Итератор, указывающий на конец контейнера.
unsafe_erase
Удаляет элементы из указанных позиций concurrent_unordered_multimap
. Этот метод не является безопасным для параллелизма.
iterator unsafe_erase(
const_iterator _Where);
size_type unsafe_erase(
const key_type& KVal);
iterator unsafe_erase(
const_iterator first,
const_iterator last);
Параметры
_Где
Положение итератора для удаления.
KVal
Значение ключа для удаления.
first
last
Итераторы.
Возвращаемое значение
Первые две функции-члена возвращают итератор, который обозначает первый элемент, находящийся за всеми удаленными элементами, или concurrent_unordered_multimap::end
(), если такой элемент не существует. Третья функция-член возвращает число элементов, которые она удаляет.
Замечания
Первая функция-член удаляет элемент управляемой последовательности, указанный параметром _Where
. Вторая функция-член удаляет элементы в диапазоне [ _Begin
, ). _End
Третья функция-член удаляет элементы в диапазоне, разделенном concurrent_unordered_multimap::equal_range
KVal.
unsafe_max_bucket_count
Возвращает максимальное количество контейнеров в этом контейнере.
size_type unsafe_max_bucket_count() const;
Возвращаемое значение
Максимальное количество контейнеров в этом контейнере.
См. также
Пространство имен concurrency
Параллельные контейнеры и объекты