На этом шаге мы рассмотрим конструкторы и деструктор этих контейнеров.
В таблице 1 представлены конструкторы и деструктор отображений и мультиотображений..
Операция | Описание |
---|---|
map с | Создает пустое отображение или мультиотображение, не содержащее ни одного элемента |
map c(op) | Создает пустое отображение или мультиотображение, использующее критерий сортировки ор |
map с1(c2) | Создает копию другого отображения или мультиотображения того же типа (с копированием всех элементов) |
map c(beg,end) | Создает отображение или мультиотображение, инициализированное элементами интервала [beg,end) |
map c(beg,end,op) | Создает отображение или мультиотображение с критерием сортировки ор, инициализированное элементами интервала [beg,end) |
c.~map() | Уничтожает все элементы и освобождает память |
В таблице символами "map" обозначена одна из следующих конструкций:
Существуют два варианта определения критерия сортировки.
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<ключ,значение> или могли быть преобразованы к нему.
На следующем шаге мы рассмотрим немодифицирующие операции над отображениями и мультиотображениями.