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


Класс 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, который является пустым или копией части или целого другого контейнера multimap.

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

allocator_type

Тип, представляющий класс allocator для объекта multimap.

const_iterator

Тип, предоставляющий двунаправленный итератор, который может считывать тот или иной элемент const в контейнере multimap.

const_pointer

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

const_reference

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

const_reverse_iterator

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

difference_type

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

iterator

Тип, который предоставляет различие между 2 итераторами, относящимися к элементам в одном контейнере multimap.

key_compare

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

key_type

Тип, описывающий объект ключа сортировки, составляющий каждый элемент контейнера multimap.

mapped_type

Тип, который представляет тип данных, хранящийся в контейнере multimap.

указатель

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

reference

Тип, предоставляющий ссылку на элемент, хранящийся в контейнере multimap.

reverse_iterator

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

size_type

Тип целого числа без знака, предоставляющий указатель на элемент const в контейнере multimap.

value_type

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

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

begin

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

cbegin

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

cend

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

clear

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

count

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

crbegin

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

crend

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

emplace

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

emplace_hint

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

empty

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

end

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

equal_range

Находит диапазон элементов, где ключ элемента соответствует заданному значению.

erase

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

find

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

get_allocator

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

insert

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

key_comp

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

lower_bound

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

max_size

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

rbegin

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

rend

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

size

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

буфер обмена

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

upper_bound

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

value_comp

Функция-член возвращает объект функции, который определяет порядок элементов в multimap путем сравнения значения ключа.

Операторы

operator=

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

Требования

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

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

Пары (ключ, значение) сохраняются в multimap как объекты типа pair. Классу пар требуется заголовок <utility>, который автоматически включается контейнером <map>.

См. также

Ссылки

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

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

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

Контейнеры

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

члены<сопоставление>