Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
###Cpp_лкц1_1.09_11_#дляБАК#29_01_12.doc
Скачиваний:
40
Добавлен:
29.04.2019
Размер:
6.42 Mб
Скачать

Глава 14. Алгоритмы

365

Таблица 14.4. Алгоритмы работы с множествами и пирамидами

Алгоритм

Выполняемая функция

includes

Включение одного множества в другое

set_i intersection

Создание отсортированного пересечения множеств

set_di fference

Создание отсортированной последовательности элементов, входящих только в первую из двух поеледовател ьностеи

set_symmetri c_di fference

Создание отсортированной последовательности элементов, входящих только в одну из двух последовательностей

set_union

Создание отсортированного объединения множеств

make_heap

Преобразование последовательности с произвольным доступом в пирамиду

pop_heap

Извлечение элемента из пирамиды

push_heap

Добавление элемента в пирамиду

sort_heap

Сортировка пирамиды

Рассмотрим эти алгоритмы подробнее.

includes

Алгоритм includes выполняет проверку включения одной последовательности в другую. Результат равен true в том случае, когда каждый элемент последовательности [first2, last2) содержится в последовательности [firstl, lastl)1.

tempiate<class Inl. class In2>

bool includesdnl firstl, Inl lastl. In2 first2. In2 last2); tempiate<class Inl. class In2. class Compare> bool includes (Inl firstl. Inl lastl. In2 first2. In2 last2. Compare comp);

setjntersection

Алгоритм setjntersection создает отсортированное пересечение множеств (то есть множество, содержащее только элементы, входящие и в первое, и во второе множество):

tempiate<class Inl, class In2. class Out> Out setjntersection

(Inl firstl. Inl lastl. In2 first2. In2 last2.

1 Квадратная скобка означает, что соответствующий элемент принадлежит последовательности, круглая — что не принадлежит (указывает на следующий за ней элемент).

366

Часть III. Стандартная библиотека

Out result); tempiate<class Inl, class In2. class Out, class Compare>

Out set_intersection (Inl firstl. Inl lastl.

In2 first2. In2 last2. Out result, Compare comp);

set_difference, set_symmetric_difference

Алгоритм set_difference выполняет копирование в Out элементов, входящих только в первую из двух последовательностей:

tempiate<class Inl, class In2. class Out>

Out set_difference(Inl firstl. Inl lastl.

In2 first2, In2 last2. Out result); tempiate<class Inl, class In2. class Out. class Compare>

Out set_difference (Inl firstl, Inl lastl.

In2 first2. In2 last2, Out result. Compare comp);

Алгоритм set_symmetric_difference выполняет копирование в Out элементов, входящих только в одну из двух последовательностей:

tempiate<class Inl, class In2. class Out>

Out set_symmetric_difference(Inl firstl. Inl lastl. In2 first2. In2 last2, Out result); tempiate<class Inl, class In2, class Out. class Compare> Out set_symmetricjjifference(lnl firstl. Inl lastl.

In2 first2. In2 last2, Out result, Compare comp);

Результирующая последовательность не должна перекрываться ни с одной из исходных.

set_union

Алгоритм set_union создает отсортированное объединение множеств (то есть множество, содержащее элементы первого и второго множества без повторов):

tempiate<class Inl, class In2, class Out> Out set_union(Inl firstl. Inl lastl,

In2 first2, In2 last2, Out result); tempiate<class Inl, class In2, class Out, class Compare> Out set_union(Inl firstl. Inl lastl,

In2 first2, In2 last2. Out result. Compare comp);

Пример использования алгоритмов работы с множествами

#include <iostream> #include <algorithm> using namespace std;

void show(const char *s. const int *begin, const int *end){