
- •1.Конструктор копирования
- •2.Перегрузка переопределение функц
- •3.Перегрузка бинарных операторов
- •4.Перегрузка унарных операторов
- •5.Static- и Const- компоненты класса
- •6.Организация внешн.Доступа к лок.Комп. Класса(Спецификатор friend)
- •7.Proxi-классы
- •8.Наследование простое
- •9.Множественное наследование
- •10.Виртуальные функции
- •11.Абстрактные классы
- •13.Шаблоны.Параметрезированные классы
- •12.Виртуальный деструктор
- •14.Совместное использование шаблонов и наследование
- •15.Реализация smart-указателя
- •16.Классы поддерживающие транзакцию
- •17.Преобразование типа.Явное преобразование типа
- •18.Преобразование типов определённых в программе
- •20.Строковые потоки,их свойства,назначение.
- •22.Организация файла последовательного доступа
- •24.Генерация исключений в конструкторах.Иерархия искл.В станд.Библиотеке
- •23.Организация файла произвольного доступа
- •25. Спецификации исключительных ситуаций
- •27. Исключительные ситуации.Основы обработки исключительных ситуаций
- •28. Задание собственного неожиданного обработчика
- •29. Исключительная ситуация, генерируемая оператором new
- •30. Перенаправление исключительных ситуаций
- •31.Категории итераторов.Основные итераторы
- •32. Категории итераторов.Основные итераторы
- •33.Пасивные и активные итераторы
- •34. Контейнеры последовательностей
- •35.Ассоциативные контейнеры
- •36.Адаптеры контейнеров
- •37.Патеррн (Абстрактная фабрика)
- •38.Патеррн (Строитель)
- •39. Патеррн (Адаптер)
- •40.Патеррн (Команда)
- •41.Спецификатор final в java
- •42.Вложенные и внутренние классы в java
- •43.Основы наследования в java
- •47.Абстрактные классы в java
- •44.Использование ключевого слова super в java
- •50.Интерфейсы в java
- •51.Множественное наследование в java
- •52.Конфликты имён при комбинировании интерфейсов в java
- •53.Расширение интерфейса в java
- •54. Исключительные ситуации. Обработка исключений java
35.Ассоциативные контейнеры
Ассоциативные контейнеры предназначены для обеспечения прямого
доступа посредством использования ключей. В STL имеется четыре ассоциативных контейнерных класса: multiset, set, multimap и map. Во всех контейнерах ключи отсортированы. Классы multiset и set манипулируют множествами значений, одновременно являющихся ключами. При этом multiset допускает одинаковые ключи, а set нет. Классы multimap и map манипулируют множествами значений, ассоциируемых с ключами. При этом multimap допускает хранение одинаковых ключей с ассоциированными значениями, а map нет.
Ассоциативный контейнер multiset обеспечивает быстрое сохранение и
выборку ключей. Упорядочение элементов контейнера определяется компараторным объектом-функцией less<тип>, при этом отсортированные ключи должны поддерживать сравнение с помощью operator<, иначе (для пользовательских типов) необходимо перегружать операцию сравнения.
Класс multiset поддерживает двунаправленные итераторы (но не итерато-
ры произвольного доступа).
Контейнерный класс set используется для обеспечения быстрого сохранения и доступа к уникальным ключам. При попытке поместить в контейнер set
дубликата ключа это действие игнорируется без идентификации ошибки. Контейнер set поддерживает двунаправленные итераторы. Работа с контейнером set может быть продемонстрирована на предыдущем примере, если в нем строку
typedef std::multiset<int,std::less<int> > intMSET;
заменить на строку
typedef set<int,std::less<int> > intMSET;
что приведет далее к созданию и работе с объектами класса set.
Ассоциативный контейнер multimap эффективен для быстрого сохранения и нахождения ключей и ассоциированных с ними значений. Многие методы, используемые в контейнерах set и multiset, применимы к контейнерам map и
multimap. Элементами multimap и map являются объекты pair – пары ключей и соответствующих им значений. Порядок сортировки ключей в контейнере определяется компараторным объектом-функцией less<тип>. В контейнере multimap допускается дублирование ключей. Это означает, что несколько значений могут быть ассоциированы с одним ключом (отношение «один ко многим»).
36.Адаптеры контейнеров
В состав STL входят три адаптера контейнеров – stack, queue и
priority_queue. Адаптеры не предоставляют реализации фундаментальной
структуры данных и не поддерживают работу с итераторами. Это отличает их
от контейнеров первого класса. Преимущество класса адаптеров состоит в возможности выбирать требуемую базовую структуру данных. Все три класса адаптеров содержат компоненты-функции push и pop, реализуемые посредством вызова соответствующих функций базового класса.
Класс stack обеспечивает возможность вставки и удаления данных в базовой структуре с одной стороны. Адаптер stack может быть реализован с любым из контейнеров последовательностей: vector, list и deque (по умолчанию реализуется с контейнером deque). Для класса stack определены следующие операции (реализуемые через соответствующие функции базового контейнера): push – помещение элемента на вершину стека, pop – удаление элемента с вер-шины стека, top – получение ссылки на вершину стека, empty – проверки на
пустоту стека и size – получение числа элементов стека.
Класс queue предназначен для вставки элементов в конец базовой структуры данных и удаления элементов из ее начала. Адаптер queue реализуется с контейнерами list и deque (по умолчанию).
Наряду с общими для всех классов адаптеров операциями push, pop,
empty и size в классе queue имеются операции front – получения ссылки на первый элемент очереди, back – ссылки на последний элемент очереди.
Класс priority_queue используется для вставки элементов в отсортированном порядке в базовую структуру данных и удаления элементов из ее начала. Адаптер priority_queue реализуется с контейнерами vector (по умолчанию)и deque.
Элементы в очередь с приоритетом заносятся в соответствии со своим
значением. Это означает, что элемент с максимальным значением помещается в начало очереди и будет первым из нее удален, а с минимальным − в конец очереди. Это достигается с помощью метода, называемого сортировкой кучи. Сравнение элементов выполняется функцией-объектом less<Тип> или другой компараторной функцией. Как и предыдущие адаптеры, priority_queue использует операции push,
pop, empty, size, а также операцию top – получения ссылки на элемент с наивысшим приоритетом.