На этом шаге мы рассмотрим конструкторы и деструктор этих контейнеров.
В таблице 1 представлены конструкторы и деструктор отображений и мультиотображений..
Таблица 1. Конструкторы и деструктор отображений и мультиотображений.
Операция | Описание |
---|---|
map с | Создает пустое отображение или мультиотображение, не содержащее ни одного элемента |
map c(op) | Создает пустое отображение или мультиотображение, использующее критерий сортировки ор |
map с1(c2) | Создает копию другого отображения или мультиотображения того же типа (с копированием всех элементов) |
map c(beg,end) | Создает отображение или мультиотображение, инициализированное элементами интервала [beg,end) |
map c(beg,end,op) | Создает отображение или мультиотображение с критерием сортировки ор, инициализированное элементами интервала [beg,end) |
c.~map() | Уничтожает все элементы и освобождает память |
В таблице символами "map" обозначена одна из следующих конструкций:
- map<Elem> - множество с сортировкой по критерию less<> (оператор <);
- map<Elem,op> - множество с сортировкой по критерию ор;
- multimap<Elem> - мультимножество с сортировкой по критерию less<> (оператор <);
- multimap<Elem,op> - мультимножество с сортировкой по критерию ор.
Существуют два варианта определения критерия сортировки.
- В параметре шаблона, например:
std::map<float,std::greater<float> > coll;
В этом случае критерий сортировки является частью типа. Таким образом, система типов гарантирует, что объединение возможно
только для контейнеров с одним критерием сортировки. Этот способ определения критерия сортировки является наиболее
распространенным. Выражаясь точнее, во втором параметре передается тип критерия сортировки, а конкретный критерий -
это объект функции, создаваемый в контейнере. Для этого конструктор контейнера вызывает конструктор по умолчанию типа
критерия сортировки. - В параметре конструктора. В этом варианте можно определить тип для нескольких критериев сортировки с
разными значениями или состояниями этих критериев. Такой подход удобен при формировании критериев сортировки на стадии
выполнения, а также при использовании различающихся критериев сортировки, которые относятся к одному типу данных.
Если критерий сортировки не указан, по умолчанию используется объект функции less<>, сортирующий элементы
оператором <.Замечание.
В системах, не поддерживающих значения по умолчанию для параметров шаблонов, критерий сортировки обычно является
обязательным параметром:map<int,less<int> > coll;
Полное имя типа для контейнера получается излишне сложным и громоздким, поэтому для него рекомендуется определить псевдоним
(то же самое полезно сделать и для определений итераторов):
typedef std::map<std::string,float,std::greater<string> > StringFloatMap; StringFloatMap coll;
Конструктор, которому передается начало и конец интервала, может применяться для инициализации контейнера элементами
контейнеров, относящихся к другим типам (от массива до стандартного входного потока данных).
За подробностями обращайтесь к 124 шагу. Однако в данном случае элементы представляют собой
пары "ключ/значение", поэтому необходимо проследить за тем, чтобы элементы исходного интервала относились к типу
раir<ключ,значение> или могли быть преобразованы к нему.
На следующем шаге мы рассмотрим немодифицирующие операции над отображениями и мультиотображениями.