std::unordered_multiset
является ассоциативным контейнером, содержащим набор возможно неуникальных объектов типа Key. Поиск, вставка и удаление имеют среднюю постоянную сложность по времени.
Внутренне элементы не отсортированы в каком-либо определенном порядке, а организованы в сегменты (buckets). В какой сегмент помещается элемент, полностью зависит от хеша его значения. Это обеспечивает быстрый доступ к отдельным элементам, поскольку после вычисления хеша он указывает на точный сегмент, в котором размещен элемент.
Порядок итерации этого контейнера не гарантируется стабильным (поэтому, например,
std::equal
нельзя использовать для сравнения двух
std::unordered_multiset
), за исключением того, что каждая группа элементов с эквивалентными ключами
equivalent
(сравниваемыми как равные с помощью
key_eq()
в качестве компаратора) образует непрерывный поддиапазон в порядке итерации, также доступный через
equal_range()
.
Все функции-члены
std::unordered_multiset
являются
constexpr
: возможно создавать и использовать объекты
std::unordered_multiset
при вычислении константного выражения.
Однако, объекты
std::unordered_multiset
обычно не могут быть
constexpr
, поскольку любая динамически выделенная память должна быть освобождена в том же вычислении константного выражения.
тип итератора, категория, значение, разность, указатель и ссылка такие же, как у iterator. Этот итератор можно использовать для итерации по одной корзине, но не между корзинами
const_local_iterator
тип итератора, категория, значение, разность, указатель и ссылка такие же, как у const_iterator. Этот итератор можно использовать для итерации по одной корзине, но не между корзинами
Типы-члены
iterator
и
const_iterator
могут быть псевдонимами одного и того же типа. Это означает, что определение пары перегруженных функций, использующих эти два типа в качестве типов параметров, может нарушать
Правило Одного Определения
. Поскольку
iterator
конвертируется в
const_iterator
, вместо этого будет работать единственная функция с параметром типа
const_iterator
.