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


Класс multiset

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

template < 
   class Key,  
   class Compare=less<Key>,  
   class Allocator=allocator<Key>  
> 
class multiset

Параметры

  • Ключ
    Тип данных элемента, который необходимо сохранить в мультинаборе.

  • Сравнение
    Тип, предоставляющий объект функции, который может сравнивать два значения элемента как ключи сортировки, чтобы определить их относительный порядок в мультинаборе. Бинарный предикат less<Key> является значением по умолчанию.

  • Allocator
    Тип, представляющий сохраненный объект распределителя, который инкапсулирует сведения о выделении и освобождении памяти для мультинабора. Значение по умолчанию — allocator*<Key>.*

Заметки

Класс мультинабора STL обладает следующими свойствами:

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

  • Реверсивный, поскольку он предоставляет двунаправленные итераторы для получения доступа к его элементам.

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

  • Множественный в том смысле, что его элементы не обязательно должны иметь уникальные ключи, т. е. одному значению ключа может соответствовать много значений элементов, связанных с ним.

  • Простой ассоциативный контейнер, поскольку его значения элементов являются значениями его ключей.

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

Итератор, предоставляемый классом мультинабора, является двусторонним итератором, но функции-члены класса insert и multiset обладают версиями, принимающими в качестве параметров шаблона более слабый итератор ввода, чьи функциональные требования ниже, чем гарантированные классом двунаправленных итераторов. Различные концепции итераторов образуют семейство, связанное уточнениями функциональности. Каждая концепция итератора имеет собственный набор требований, а алгоритмы, работающие с ними, должны ограничивать свои предположения согласно требованиям, предоставляемым этим типом итератора. Можно предположить, что итератор ввода может быть разыменован для обращения к определенному объекту и инкрементирован до следующего итератора в последовательности. Это минимальный набор функциональных возможностей, но его достаточно, чтобы иметь возможность осмысленно говорить о диапазоне итераторов [First, Last) в контексте функций-членов класса.

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

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

Сопоставление упорядочивает управляемую им последовательность путем вызова сохраненного объекта функции, относящегося к типу Compare. Этот сохраненный объект является функцией сравнения, доступ к которой можно получить путем вызова функции-члена key_comp. В целом, упорядочиваемые элементы должны лишь подлежать сравнению "меньше чем" для установления такого порядка, чтобы, имея любые два элемента, можно было определить, что они равны (ни один не меньше другого) или что один меньше другого. Это приводит к упорядочению неравнозначных элементов. С более технической точки зрения, функция сравнения является бинарным предикатом, который вызывает строгого слабое упорядочение в стандартном математически смысле. Бинарный предикат f(x,y) является объектом функции, обладающим двумя объектами аргументов x и y и возвращаемым значением true или false. Порядок, заданный для набора, является строгим слабым порядком, если бинарный предикат является нерефлексивным, антисимметричным и переходящим и если эквивалентность является переходящей, где два x и y объекта определяются как эквивалентные, тогда как оба параметра f(x,y) и f(y,x) имеют значение false. Если более строгое условие равенства между ключами заменяет условие эквивалентности, порядок становится общим (т.е. все элементы упорядочиваются относительно друг друга), и сопоставленные ключи будут неотличимы друг от друга.

Конструкторы

multiset

Создает multiset, который является пустым или копией части или целого заданного multiset.

Определения типов

allocator_type

Typedef для класса allocator для объекта multiset.

const_iterator

Typedef для двунаправленного итератора, который может считывать элемент const в multiset.

const_pointer

Typedef для указателя на элемент const в multiset.

const_reference

Typedef для ссылки на элемент const, хранящийся в multiset для чтения и выполнения операций const.

const_reverse_iterator

Typedef для двунаправленного итератора, который может считывать любой элемент const в multiset.

difference_type

Целочисленный Typedef со знаком для числа элементов в multiset в диапазоне между элементами, на которые указывают итераторы.

iterator

Typedef для двунаправленного итератора, который может считывать или изменять любой элемент в multiset.

key_compare

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

key_type

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

указатель

Typedef для указателя на элемент в multiset.

reference

Typedef для ссылки на элемент, сохраненный в multiset.

reverse_iterator

Typedef для двунаправленного итератора, который может считывать или изменять элемент в обратном multiset.

size_type

Целочисленный Typedef без знака, который может представлять число элементов в multiset.

value_compare

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

value_type

Typedef, описывающий объект, хранящийся в виде элемента, как multiset в смысле его возможностей, присущих значению.

Функции-члены

begin

Возвращает итератор, указывающий на первый элемент в multiset.

cbegin

Возвращает итератор const, обращающийся к первому элементу в multiset.

cend

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

clear

Стирает все элементы в multiset.

count

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

crbegin

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

crend

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

emplace

Вставляет созданный на месте элемент в multiset.

emplace_hint

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

empty

Проверяет, пуст ли multiset.

end

Возвращает итератор, указывающий на место после завершающего элемента в multiset.

equal_range

Возвращает пару итераторов. Первый итератор в паре указывает на первый элемент в multiset с ключом, который больше указанного ключа. Второй итератор в паре указывает на первый элемент в multiset с ключом, который больше или равен заданному ключу.

erase

Удаляет элемент или диапазон элементов в multiset с заданных позиций или удаляет элементы, соответствующие заданному ключу.

find

Возвращает итератор, указывающий на первое расположение элемента в multiset, имеющего ключ, равный указанному ключу.

get_allocator

Возвращает копию объекта allocator, который используется для создания multiset.

insert

Вставляет элемент или диапазон элементов в multiset.

key_comp

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

lower_bound

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

max_size

Возвращает максимальную длину multiset.

rbegin

Возвращает итератор, указывающий на первый элемент в обратном multiset.

rend

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

size

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

буфер обмена

Выполняет обмен элементами между двумя объектами multiset.

upper_bound

Возвращает итератор, указывающий на первый элемент в multiset с ключом, который больше указанного ключа.

value_comp

Извлекает копию объекта сравнения, который используется для упорядочивания значений элементов в multiset.

Операторы

operator=

Заменяет элементы multiset копией другого multiset.

Требования

Заголовок: <set>

Пространство имен: std

См. также

Ссылки

Потокобезопасность в стандартной библиотеке C++

Библиотека стандартных шаблонов

Основные понятия

Контейнеры

Другие ресурсы

Члены <установка>