Анализ и использование класса multimap. Библиотека multimap.
Модифицированный вариант map, в котором отсутствует требования уникальности ключа - то есть, если произвести поиск по ключу, то вернется не одно значение, а набор значений, сохраненных с данным ключом. Класс multimap поддерживает поддерживает ассоциативный контейнер, в котором неуникальным (в общем случае) ключам соответствуют определённые значения. Спецификация его шаблона имеет следующий вид:
Здесь key - тип данных ключей,T - тип сохраняемых (отображемых)значений, а Comp - функция, которая сравнивает два ключа. Класс multimap имеет следующие конструкторы:
Первая форма конструктора создает пустое мультиотображение. Вторая создает мультиотображение, которое содержит те же элементы, что и мультиотображение ob. Третья создает мультиотображение, которое содержит элементы в диапазоне, заданном параметрами start и end. Функция, заданная параметром cmpfn (и если она задана), определяет упорядочение мультиотображения. Для класса multimap определены следующие операторы сравнения:
Класс multimap содержит перечисленные ниже функции-члены. В приведенных описаниях элемент key_type представляет тип ключа, а элемент value_type - пару элементов pair<Key, T>. iterator begin(); const_iterator begin() const; Возвращает итератор для первого элемента в мультиотображении. void clear(); Удаляет все элементы из мультиотображения. size_type count(const key_type &k) const; Возвращает число вхождений ключа k в мультиотображении (1 или 0). bool empty() const; Возвращает значение true, если данное мультиотображение пустое, и false в противном случае. const_iterator end() const; iterator end(); Возвращает итератор, указывающий на конец мультиотображения. pair<iterator, iterator> equal_range(const key_type &k); pair<const_iterator, const_iterator> equal_range(const key_type &k) const; Возвращает пару итераторов, которые указывают на первый и последний элементы в мультиотображении, содержащие заданный ключ. void erase(iterator i); Удаляет элемент, адресуемый итератором i. void erase(iterator start, iterator end); Удаляет элементы в диапазоне, задаваемом параметрами start и end. size_type erase(const key_type &k); Удаляет из мультиотображения элементы, ключи которых имеют значение k. iterator find(const key_type &k); const_iterator find(const key_type &k) const; Возвращает итератор для заданного ключа. Если ключ не обнаружен, возвращает итератор до конца мультиотображения. allocator_type get_allocator() const; Возвращает распределитель мультиотображения. iterator insert(iterator i, const value_type &val); Вставляет значение val после элемента, заданным итератором i, возвращает итератор для этого элемента. template <class InIter> void insert(InIter start, InIter end); Вставляет элементы заданного диапазона. pair<iterator, bool> insert(const value_type &val); Вставляет значение val в используемое мультиотображение. Возвращает итератор для данного мультиотображения. Элемент вставляет только в том случае, если его еще нет в мультиотображении. Если элемент был вставлен возвращает пару pair<iterator, true>, в противном случае pair<iterator, false> key_compare key_comp() const; Возвращает объект-функцию, которая сравнивает ключи. iterator lower_bound(const key_type &k); const_iterator lower_bound(const key_type &k) const; Возвращает итератор для первого элемента в мультиотображении, ключ которого равен значению k или больше этого значения. size_type max_size() const; Возвращает максимальное число элементов, которое может содержать мультиотображение. reference operator[](const key_type &i); Возвращает ссылку на элемент, заданный параметром i. Если этого элемента не существует, вставляет его в мультиотображение. reverse_iterator rbegin(); const_reverse_iterator rbegin() const; Возвращает реверсивный итератор для конца мультиотображения. reverse_iterator rend(); const_reverse_iterator rend() const; Возвращает реверсивный итератор для начала мультиотображения. size_type size() const; Возвращает текущее количество элементов в мультиотображении. void swap(multimap<Key, T, Comp, Allocator> &ob); Выполняет обмен элементами данного мультиотображения и мультиотображения ob. iterator upper_bound(const key_type &k); const_iterator upper_bound(const key_type &k) const; Возвращает итератор для первого элемента в мультиотображении, ключ которого больше заданного значения k. value_compare value_comp() const; Возвращает объект-функцию, которая сравнивает значения.
Домашнее задание Заполнить вектор длинной 10 квадратами целых чисел и вывести его в выходной поток. Заполнить двухмерный вектор таблицей умножения и выввести его в выходной поток. Описать класс "студент" с полями: имя, фамилия, курс. Переопределить у этого класса оператор вывода в поток. Написать функцию заполнения вектора из класса "студент" произволными данными. Написать функцию печати содержимого вектора. Отсортировать вектор по именам студентов по возрастанию. Отсортировать стабильно вектор по фамилиям студентов. Поставить в первые три элемента вектора студентов самых младших курсов по возрастанию. После каждой операции выводить список студентов в выходной поток.
Урок №36. Поздравляем, сегодня у Вас заключительное занятие по С++. И, естественно, экзамен!!! Однако кроме этого, мы рекомендуем Вам ознакомиться с темами, которые мы представили для Вас в этом уроке и подвести черту под изучением библиотеки STL. Желаем удачи!!!
©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|