Класс unordered_multiset
Этот шаблонный класс описывает объект, управляющий последовательностью элементов типа const Key переменной длины. Последовательность слабо упорядочена хэш-функцией, которая разделяет последовательность в упорядоченный набор подпоследовательностей, называемых блоками. В каждом блоке функция сравнения определяет, упорядочена ли каждая пара элементов соответствующим образом. Каждый элемент используется в качестве ключа сортировки и в качестве значения. Последовательность представляется в виде, позволяющем выполнять поиск, вставку и удаление произвольного элемента несколькими операциями, которые могут не зависеть от числа элементов в последовательности (постоянное время), по крайней мере, когда все блоки имеют примерно одинаковую длину. В худшем случае, когда все элементы находятся в одном блоке, количество операций пропорционально количеству элементов в последовательности (линейное время). Кроме того, вставка элементов не делает итераторы недействительными, а при удалении элементов недействительными становятся только итераторы, указывающие на удаленный элемент.
template<class Key,
class Hash = std::hash<Key>,
class Pred = std::equal_to<Key>,
class Alloc = std::allocator<Key> >
class unordered_multiset;
Параметры
Параметр |
Описание |
Key |
Тип ключа. |
Hash |
Тип объекта хэш-функции. |
Pred |
Тип объекта функции сравнения на предмет равенства. |
Alloc |
Класс распределителя. |
Члены
Определение типа |
Описание |
Тип распределителя для управления хранилищем. |
|
Тип постоянного итератора для управляемой последовательности. |
|
Тип постоянного итератора блока для управляемой последовательности. |
|
Тип постоянного указателя на элемент. |
|
Тип постоянной ссылки на элемент. |
|
Тип расстояния со знаком между двумя элементами. |
|
Тип хэш-функции. |
|
Тип итератора для управляемой последовательности. |
|
Тип функции сравнения. |
|
Тип ключа упорядочения. |
|
Тип итератора блока для управляемой последовательности. |
|
Тип указателя на элемент. |
|
Тип ссылки на элемент. |
|
Тип беззнакового расстояния между двумя элементами. |
|
Тип элемента. |
Функция-член |
Описание |
Задает начало управляемой последовательности. |
|
Получает номер блока для значения ключа. |
|
Получает количество блоков. |
|
Получает размер блока. |
|
Задает начало управляемой последовательности. |
|
Задает конец управляемой последовательности. |
|
Удаляет все элементы. |
|
Определяет количество элементов, соответствующих заданному ключу. |
|
Добавляет элемент, созданный на месте. |
|
Добавляет элемент, созданный на месте, с подсказкой. |
|
Проверяет отсутствие элементов. |
|
Задает конец управляемой последовательности. |
|
Находит диапазон, соответствующий указанному ключу. |
|
Удаляет элементы в указанных позициях. |
|
Определяет элемент, соответствующий указанному ключу. |
|
Возвращает сохраненный объект распределителя. |
|
Получает сохраненный объект хэш-функции. |
|
Добавляет элементы. |
|
Получает сохраненный объект функции сравнения. |
|
Подсчитывает среднее число элементов в блоке. |
|
Получает максимальное количество блоков. |
|
Возвращает или задает максимальное количество элементов в блоке. |
|
Возвращает максимальный размер управляемой последовательности. |
|
Повторно создает хэш-таблицу. |
|
Подсчитывает количество элементов. |
|
Меняет местами содержимое двух контейнеров. |
|
Создает объект контейнера. |
Оператор |
Описание |
Копирует хэш-таблицу. |
Заметки
Объект упорядочивает управляемую им последовательность путем вызова двух сохраненных объектов, объекта функции сравнения типа unordered_multiset::key_equal и объекта хэш-функции типа unordered_multiset::hasher. Доступ к первому сохраненному объекту можно получить, вызвав функцию-член unordered_multiset::key_eq(); доступ ко второму сохраненному объекту выполняется путем вызова функции-члена unordered_multiset::hash_function(). В частности, для всех значений X и Y типа Key вызов key_eq()(X, Y) возвращает значение true, только если два значения аргументов имеют соответствующий порядок; вызов hash_function()(keyval) создает распределение значений типа size_t. В отличие от шаблонного класса Класс unordered_set объект шаблонного класса unordered_multiset не гарантирует, что key_eq()(X, Y) всегда имеет значение false для любых двух элементов управляемой последовательности. (Ключи не обязательно должны быть уникальными.)
Объект также хранит максимальный коэффициент нагрузки, который определяет максимальное желаемое среднее количество элементов в блоке. Если вставка элемента вызывает превышение значением unordered_multiset::load_factor() максимального коэффициента нагрузки, контейнер увеличивает количество блоков и перестраивает хэш-таблицу по мере необходимости.
Фактический порядок элементов в управляемой последовательности зависит от хэш-функции, функции сравнения, порядка вставки, максимального коэффициента нагрузки и текущего числа блоков. Обычно невозможно предсказать порядок элементов в управляемой последовательности. Однако всегда можно сохранять уверенность, что любое подмножество элементов, имеющих соответствующий порядок, будет расположено по соседству в управляемой последовательности.
Объект выделяет и освобождает хранилище для управляемой им последовательности с помощью сохраненного объекта распределителя типа unordered_multiset::allocator_type. Такой объект распределителя должен иметь такой же внешний интерфейс, как объект шаблонного класса allocator. Обратите внимание, что сохраненный объект распределителя не копируется, когда назначается объект контейнера.
Требования
Заголовок: <unordered_set>
Пространство имен: std
См. также
Ссылки
Потокобезопасность в стандартной библиотеке C++
Библиотека стандартных шаблонов