Множество QSet<T>

   
На этом шаге рассмотрим множество QSet<T>.

   
Как заметил немецкий математик Георг Кантор, "Множество — это есть многое, мысленно подразумеваемое нами как единое". Это "единое", в контексте Tulip, есть не что иное, как контейнер QSet<T>, который записывает элементы в некотором порядке и предоставляет возможность очень быстрого просмотра значений и выполнения с ними операций, характерных для множеств, таких как объединение, пересечение и разность.

   
Необходимым условием является то, что ключи должны быть уникальны. Класс QSet<T> базируется на использовании хэш-таблицы QHash<K,T>, но является вырожденным ее вариантом, т. к. с ключами
не связываются никакие значения. Главная задача этого класса заключается в хранении
ключей. Контейнер QSet<T> можно использовать в качестве неупорядоченного списка для
быстрого поиска данных. Пример множеств показан на рис. 1, на котором изображены
два множества, состоящие из трех элементов каждое.


Рис.1. Пример множеств

   
Операции, которые можно проводить с множествами, проиллюстрированы на рис. 2.


Рис.2. Некоторые операции над множествами

   
Создадим два множества и запишем в них элементы в соответствии с рис. 1.

QSet<QString> set1;
QSet<QString> set2;
set1 << "Turbo Pascal" << "Borland Delphi" << "Borland C++";
set2 << "Mathlab" << "Borland Delphi" << "MathCad";

   
Произведем операцию объединения (см. рис. 2) этих двух множеств, а для того
чтобы элементы множеств остались неизмененными, введем промежуточное множество setResult:

QSet<QString> setResult = set1;
setResult.unite(set2);
qDebug() << "Объединение = " " setResult.toList();

   
На экране должно быть показано следующее:


Рис.3. Результат объединения множеств

   
Теперь произведем операцию пересечения (см. рис. 2):

setResult = set1;
setResult.intersect(set2);
qDebug() << "Пересечение set1 с set2 = " << setResult.toList();

   
Поскольку два множества имеют только один одинаковый элемент, то на экране мы
увидим:


Рис.4. Результат пересечения множеств

   
И последняя операция, которую мы произведем, будет операция разности двух множеств (см. рис. 2):

setResult = set1;
setResult.subtract(set2);
qDebug() << "Разность set1 с set2 = " << setResult.toList();

   
Множество set1 отличается от множества set2 двумя элементами, поэтому на экране должно отобразиться:


Рис.5. Результат разности множеств

   
Файлы приложения можно взять Предыдущий шаг
Содержание
Следующий шаг



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

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