Класс multimap
Класс multimap библиотеки стандартных шаблонов используется для хранения и извлечения данных из коллекции, где каждый элемент является парой, обладающей значением данных и ключом сортировки. Значение ключа может не быть уникальным и применяется для автоматической сортировки данных. Значение элементов в multimap, но не связанное с ним значение ключа, можно изменить напрямую. Значения ключей, связанные со старыми элементами, необходимо удалить и вставить новые значения ключей, связанные с новыми элементами.
template <
class Key,
class Type,
class Traits=less<Key>,
class Allocator=allocator<pair <const Key, Type> >
> class multimap;
Параметры
Key
Тип данных ключа для сохранения в контейнере multimap.Type
Тип данных элемента, который необходимо сохранить в контейнере multimap.Traits
Тип, предоставляющий объект функции, который может сравнивать два значения элемента как ключи сортировки, чтобы определить их относительный порядок в контейнере multimap. Бинарный предикат less<Key> является значением по умолчанию.Allocator
Тип, представляющий сохраненный объект распределителя, который инкапсулирует сведения о выделении и освобождении памяти для сопоставления. Этот аргумент является необязательным, и значением по умолчанию является allocator<pair <const Key, Type> >.
Заметки
Класс multimap в STL обладает следующими свойствами:
Ассоциативный контейнер, который является контейнером переменного размера, поддерживающим эффективное получение значений элементов на основе значения соответствующего ключа.
Реверсивный, поскольку он предоставляет двунаправленные итераторы для получения доступа к его элементам.
Сортированный, поскольку его элементы упорядочены по значениям ключей в контейнере в соответствии с заданной функцией сравнения.
Множественный, поскольку его элементы не обязательно должны иметь уникальные ключи, т. е. одному значению ключа может соответствовать много значений данных элементов, связанных с ним.
Является контейнером ассоциативной пары, поскольку его значения данных элементов отличаются от его значений ключей.
Шаблонный класс шаблона, поскольку функции, которые он предоставляет, являются универсальными и, соответственно, не зависят от конкретного типа данных, содержащихся в виде элементов или ключей. Типы данных, используемые для элементов и ключей, вместо этого определяются как параметры в шаблоне класса вместе с функцией и распределителем сравнения.
Итератор, предоставляемый классом сопоставления, является двусторонним итератором, но функции-члены класса insert и multimap обладают версиями, принимающими в качестве параметров шаблона более слабый итератор ввода, чьи функциональные требования ниже, чем гарантированные классом двунаправленных итераторов. Различные концепции итераторов образуют семейство, связанное уточнениями функциональности. Каждая концепция итератора имеет собственный набор требований, а алгоритмы, работающие с ними, должны ограничивать свои предположения согласно требованиям, предоставляемым этим типом итератора. Можно предположить, что итератор ввода может быть разыменован для обращения к определенному объекту и инкрементирован до следующего итератора в последовательности. Это минимальный набор функциональных возможностей, но его достаточно, чтобы иметь возможность осмысленно говорить о диапазоне итераторов [First, Last), в контексте функций-членов класса.
Выбор типа контейнера должен в общем случае производиться на основе типа поиска и вставки, который требуется приложению. Ассоциативные контейнеры оптимизированы для операций поиска, вставки и удаления. Функции-члены, которые явно поддерживают эти операции, являются эффективными и в среднем выполняют их пропорционально логарифму числа элементов в контейнере. Вставка элементов не делает итераторы недействительными, а при удалении элементов недействительными становятся только итераторы, которые ранее указывали конкретно на удаленные элементы.
Класс multimap рекомендуется использовать в качестве ассоциативного контейнера, если условия, ассоциирующие значения с ключами, удовлетворяются приложением. Модель для этого типа структуры — это упорядоченный список ключевых слов со связанными значениями строк, предоставляющими, например, определения, в которых слова не всегда обладают уникальными определениями. Если же ключевые слова обладают уникальными определениями, и ключи уникальны, то сопоставление будет предпочтительным контейнером. Если же сохранен только список слов, то в качестве контейнера необходимо выбрать набор. Если допускается повторное использование слов, то подходящей структурой контейнера будет multiset.
Контейнер multimap определяет порядок расположения элементов в последовательности, которой он управляет, путем обращения к сохраненному объекту функции типа key_compare. Этот сохраненный объект является функцией сравнения, доступ к которой можно получить путем вызова функции-члена key_comp. В целом, упорядочиваемые элементы должны лишь подлежать сравнению "меньше чем" для установления такого порядка, чтобы, имея любые два элемента, можно было определить, что они равны (ни один не меньше другого) или что один меньше другого. Это приводит к упорядочению неравнозначных элементов. С более технической точки зрения, функция сравнения является бинарным предикатом, который вызывает строгого слабое упорядочение в стандартном математически смысле. Бинарный предикат f(x,y) является объектом функции, обладающим двумя объектами аргументов x и y, а также возвращаемым значением true или false. Порядок, заданный для набора, является строгим слабым порядком, если бинарный предикат является нерефлексивным, антисимметричным и переходящим и если эквивалентность является переходящей, где два объекта x и y заданы как эквивалентные при том, что f(x,y) и f(y,x) имеют значение false. Если более строгое условие равенства между ключами заменяет условие эквивалентности, порядок становится общим (т.е. все элементы упорядочиваются относительно друг друга), и сопоставленные ключи будут неотличимы друг от друга.
Члены
Конструкторы
Создает контейнер multimap, который является пустым или копией части или целого другого контейнера multimap. |
Определения типов
Тип, представляющий класс allocator для объекта multimap. |
|
Тип, предоставляющий двунаправленный итератор, который может считывать тот или иной элемент const в контейнере multimap. |
|
Тип, предоставляющий указатель на элемент const в контейнере multimap. |
|
Тип, предоставляющий ссылку на элемент const, сохраненный в контейнере multimap для чтения и выполнения операций const. |
|
Тип, предоставляющий двунаправленный итератор, который может считывать любой элемент const в контейнере multimap. |
|
Тип целого числа со знаком, пригодный для представления количества элементов в контейнере multimap в диапазоне между элементами, на которые указывают итераторы. |
|
Тип, который предоставляет различие между 2 итераторами, относящимися к элементам в одном контейнере multimap. |
|
Тип, предоставляющий объект функции, который может сравнить два ключа сортировки для определения относительного порядка двух элементов в контейнере multimap. |
|
Тип, описывающий объект ключа сортировки, составляющий каждый элемент контейнера multimap. |
|
Тип, который представляет тип данных, хранящийся в контейнере multimap. |
|
Тип, предоставляющий указатель на элемент const в контейнере multimap. |
|
Тип, предоставляющий ссылку на элемент, хранящийся в контейнере multimap. |
|
Тип, предоставляющий двунаправленный итератор, который может считывать или изменять элемент в обращенном контейнере multimap. |
|
Тип целого числа без знака, предоставляющий указатель на элемент const в контейнере multimap. |
|
Тип, предоставляющий объект функции, который может сравнить два элемента в качестве ключей сортировки для определения их относительного порядка в контейнере multimap. |
Функции-члены
Возвращает итератор, обращающийся к первый элемент в контейнере multimap. |
|
Возвращает итератор const, обращающийся к первому элементу в multimap. |
|
Возвращает итератор const, который обращается к месту, следующему за последним элементом в multimap. |
|
Стирает все элементы в multimap. |
|
Возвращает число элементов в контейнере multimap, ключи которых соответствуют ключу, заданному параметром. |
|
Возвращает итератор const, который обращается к первому элементу в обращенном контейнере multimap. |
|
Возвращает итератор const, который обращается к месту, следующему за последним элементом в обращенном контейнере multimap. |
|
Вставляет созданный на месте элемент в multimap. |
|
Вставляет созданный на месте элемент в multimap с подсказкой о размещении |
|
Проверяет, пуст ли multimap. |
|
Возвращает итератор, который обращается к месту, следующему за последним элементом в контейнере multimap. |
|
Находит диапазон элементов, где ключ элемента соответствует заданному значению. |
|
Удаляет элемент или диапазон элементов в multimap с заданных позиций или удаляет элементы, соответствующие заданному ключу. |
|
Возвращает итератор, который обращается к первому местоположению элемента в контейнере multimap с ключом, эквивалентным указанному ключу. |
|
Возвращает копию объекта allocator, который используется для создания контейнера multimap. |
|
Вставляет элемент или диапазон элементов в multimap. |
|
Извлекает копию объекта сравнения, который используется для упорядочивания ключей в контейнере multimap. |
|
Возвращает итератор, указывающий на первый элемент в контейнере multimap с ключом, который больше или равен указанному ключу. |
|
Возвращает максимальную длину multimap. |
|
Возвращает итератор, который обращается к первому элементу в обращенном контейнере multimap. |
|
Возвращает итератор, который обращается к месту, следующему за последним элементом в обращенном контейнере multimap. |
|
Возвращает количество элементов в контейнере multimap. |
|
Выполняет обмен элементами между двумя объектами multimap. |
|
Возвращает итератор, указывающий на первый элемент в контейнере multimap с ключом, который больше указанного ключа. |
|
Функция-член возвращает объект функции, который определяет порядок элементов в multimap путем сравнения значения ключа. |
Операторы
Заменяет элементы multimap копией другого multimap. |
Требования
Заголовок: <map>
Пространство имен: std
Пары (ключ, значение) сохраняются в multimap как объекты типа pair. Классу пар требуется заголовок <utility>, который автоматически включается контейнером <map>.
См. также
Ссылки
Потокобезопасность в стандартной библиотеке C++
Библиотека стандартных шаблонов