Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

11.4. Наборы и Структуры Союза/Находить 533

11.4 Наборы и Структуры Союза/Находить

В этой секции мы изучаем наборы, включая операции, которые определяют их и операции, которые могут быть применены ко всем наборам.

11.4.1 Набор ADT

Набор - коллекция отличных объектов. Таким образом, в a нет никаких двойных элементов

набор, и нет никакого явного понятия ключей или даже заказа. Несмотря на это, если элементы в наборе сопоставимы, то мы можем поддержать наборы, которые будут заказаны. Фундаментальные функции набора ADT для набора S являются следующим:

вставка (e): Вставьте элемент e в S и возвратите обращение iterator

к его местоположению; если элемент уже существует, операция проигнорирована.

найдите (e): Если S содержит e, возвратите iterator p относящийся к этому входу,

еще возвратите конец.

сотрите (e): Удалите элемент e из S.

начните (): Возвратите iterator к началу S.

конец (): Возвратите iterator к воображаемому положению только вне

конец S.

C ++ Стандартная Библиотека Шаблона обеспечивает набор класса, который содержит весь из

эти функции. Это фактически осуществляет заказанный набор и поддерживает следующие дополнительные операции также.

ниже связанный (e): Возвратите iterator к самому большому меньше чем или равному элементу

к e.

верхняя граница (e): Возвратите iterator к самому маленькому элементу, больше, чем или

равняйтесь e.

равняйтесь диапазону (e): Возвратите iterator диапазон элементов, которые равны e.

Набор STL - templated с типом элемента. Как с другими классами STL

мы видели до сих пор, набор - пример контейнера, и следовательно поддерживает доступ iterators. Чтобы объявить объект набора типа, необходимо сначала включать файл определения, названный «набором». Набор - часть станд. namespace, и следовательно любой необходимо использовать «станд.:: набор» или предоставлять соответствующее заявление «использования».

Набор STL осуществлен, приспособив STL, заказанный карту (который основан на красно-черном дереве). У каждого входа есть собственность, что ключ и элемент оба равны e. Таким образом, каждый вход имеет форму (e, e).

534

Глава 11. Сортировка, наборы и выбор

11.4.2 Наборы Mergable и образец метода шаблона

Давайте исследуем дальнейшее расширение заказанного набора ADT, который допускает операции

между парами наборов. Это также служит, чтобы мотивировать шаблон программирования, известный как метод шаблона.

Во-первых, мы вспоминаем математические определения союза, пересечения, и

вычитание двух наборов A и B:

È B =x: x находится в A, или x находится в B\,

Ç B =x: x находится в A, и x находится в B\, - B =x: x находится в A, и x не находится в B\.

Пример 11.7: Большая часть интернет-магазина поисковых систем, для каждого Word x в их dic-

база данных tionary, набор, W (x), веб-страниц, которые содержат x, где каждая веб-страница определена уникальным интернет-адресом. Когда подарено вопрос для Word x, такая поисковая система должна только возвратить веб-страницы в наборе W (x), сортированный согласно некоторому составляющему собственность приоритетному ранжированию страницы «важность». Но, когда подарено вопрос с двумя словами для Word x и y, такая поисковая система должна сначала

вычислите пересечение W (x)ÇW (y), и затем возвратите веб-страницы в результате -

луг установил сортированный приоритетом. Несколько поисковых систем используют алгоритм пересечения набора

описанный в этой секции для этого вычисления.

Фундаментальные методы набора Mergable ADT

Фундаментальные функции mergable набора ADT, действующий на набор A, как следующий -

понижения:

союз (B): Замените союзом A, и B, то есть, выполняют

ÊÈ B.

пересекитесь (B): Замените пересечением A и B, то есть, exe-

милый¬Ç B.

вычтите (B): Замените различием A, и B, то есть, выполняют

Ê- B.

Простое внедрение набора Mergable

Один из самых простых способов осуществить набор состоит в том, чтобы сохранить свои элементы в или -

отваженная последовательность. Это внедрение включено в несколько библиотек программного обеспечения для универсальных структур данных, например. Поэтому, давайте считать осуществление набора ADT с заказанной последовательностью (мы рассматриваем другие внедрения в нескольких упражнениях). Любое последовательное полное отношение заказа среди элементов набора может использоваться, если тот же самый заказ используется для всех наборов.