Класс 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. |
Определения типов
Typedef для класса allocator для объекта multiset. |
|
Typedef для двунаправленного итератора, который может считывать элемент const в multiset. |
|
Typedef для указателя на элемент const в multiset. |
|
Typedef для ссылки на элемент const, хранящийся в multiset для чтения и выполнения операций const. |
|
Typedef для двунаправленного итератора, который может считывать любой элемент const в multiset. |
|
Целочисленный Typedef со знаком для числа элементов в multiset в диапазоне между элементами, на которые указывают итераторы. |
|
Typedef для двунаправленного итератора, который может считывать или изменять любой элемент в multiset. |
|
Typedef для объекта функции, который может сравнивать два ключа для определения относительного порядка двух элементов в multiset. |
|
Typedef для объекта функции, который может сравнить два ключа сортировки для определения относительного порядка двух элементов в multiset. |
|
Typedef для указателя на элемент в multiset. |
|
Typedef для ссылки на элемент, сохраненный в multiset. |
|
Typedef для двунаправленного итератора, который может считывать или изменять элемент в обратном multiset. |
|
Целочисленный Typedef без знака, который может представлять число элементов в multiset. |
|
Typedef для объекта функции, который может сравнить два элемента как ключи сортировки для определения их относительного порядка в multiset. |
|
Typedef, описывающий объект, хранящийся в виде элемента, как multiset в смысле его возможностей, присущих значению. |
Функции-члены
Возвращает итератор, указывающий на первый элемент в multiset. |
|
Возвращает итератор const, обращающийся к первому элементу в multiset. |
|
Возвращает итератор const, который обращается к месту, следующему за последним элементом в multiset. |
|
Стирает все элементы в multiset. |
|
Возвращает число элементов в multiset, ключи которых соответствуют ключу, заданному в виде параметра. |
|
Возвращает итератор const, который обращается к первому элементу в обращенном наборе. |
|
Возвращает итератор const, который обращается к месту, следующему за последним элементом в обращенном наборе. |
|
Вставляет созданный на месте элемент в multiset. |
|
Вставляет созданный на месте элемент в multiset с подсказкой о размещении. |
|
Проверяет, пуст ли multiset. |
|
Возвращает итератор, указывающий на место после завершающего элемента в multiset. |
|
Возвращает пару итераторов. Первый итератор в паре указывает на первый элемент в multiset с ключом, который больше указанного ключа. Второй итератор в паре указывает на первый элемент в multiset с ключом, который больше или равен заданному ключу. |
|
Удаляет элемент или диапазон элементов в multiset с заданных позиций или удаляет элементы, соответствующие заданному ключу. |
|
Возвращает итератор, указывающий на первое расположение элемента в multiset, имеющего ключ, равный указанному ключу. |
|
Возвращает копию объекта allocator, который используется для создания multiset. |
|
Вставляет элемент или диапазон элементов в multiset. |
|
Предоставляет объект функции, который может сравнивать два ключа сортировки для определения относительного порядка двух элементов в multiset. |
|
Возвращает итератор, указывающий на первый элемент в multiset с ключом, который больше или равен указанному ключу. |
|
Возвращает максимальную длину multiset. |
|
Возвращает итератор, указывающий на первый элемент в обратном multiset. |
|
Возвращает итератор, указывающий на местоположение, расположенное после завершающего элемента в обратном multiset. |
|
Возвращает количество элементов в multiset. |
|
Выполняет обмен элементами между двумя объектами multiset. |
|
Возвращает итератор, указывающий на первый элемент в multiset с ключом, который больше указанного ключа. |
|
Извлекает копию объекта сравнения, который используется для упорядочивания значений элементов в multiset. |
Операторы
Заменяет элементы multiset копией другого multiset. |
Требования
Заголовок: <set>
Пространство имен: std
См. также
Ссылки
Потокобезопасность в стандартной библиотеке C++
Библиотека стандартных шаблонов