Операции над отображениями и мультиотображениями. Операции создания, копирования и уничтожения

   
На этом шаге мы рассмотрим конструкторы и деструктор этих контейнеров.

   
В таблице 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<ключ,значение> или могли быть преобразованы к нему.

   
На следующем шаге мы рассмотрим немодифицирующие операции над отображениями и мультиотображениями.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий