|
|
|
| Скажите, какие операции есть над множествами есть С++?
Я знаю такие
вставить
удалить
узнать размер...
А мне надо все. Ну, например
узнать, есть ли такой элемент в множестве
найти пересечение 2-ч множеств
объединение ~
вычитание ~
и др.
Подскажите. | |
|
|
|
|
|
|
|
для: AlMag
(19.03.2007 в 19:59)
| | В самом языке С++ нет типа данных "множество". Соответственно нет и операций над ними.
Но в стандартной библиотеке шаблонов STL есть два подходящих шаблонных класса:
set и multiset (множество и мультимножество). Второй отличается от первого тем, что элементы
в нем могут повторяться. Такие операции как вставить, удалить, узнать размер, узнать есть ли
такой элемент в множестве - там есть. А такие операции как найти пересечение, объединение,
вычитание двух множеств придется реализовать самому, но это вроде бы дело не хитрое.
Про STL можно почитать в книге Джосьютиса. Книгу можно скачать с сайта. | |
|
|
|
|
|
|
|
для: oleg_alexeev
(19.03.2007 в 20:43)
| | STL включает внешние алгоритмы реализующие объединение, пересечение, вычитание, для это предназначены алгоритмы set_union(), set_intersection, set_difference(), соответственно. Однако эти алгоритмы предназначены для упорядоченных интервалов, к которым множество не относится.
Все перечисленные операции для произвольного контейнера обычно осуществляют через алгоритм merge(), который объединяет два интервала по правилу, заданному предикатом. | |
|
|
|
|
|
|
|
для: cheops
(19.03.2007 в 23:19)
| | Намотаем на ус :))
Спасибо. | |
|
|
|
|
|
|
|
для: oleg_alexeev
(20.03.2007 в 08:36)
| | Спасибо. Да, я как раз имел в виду STL и set.
Просто я столкнулся с тем, что не знаю, как объединить 2 множества. Подумал, что в STL
есть такая ф-ция, что бы вручную не писать, но раз нет, так нет.
Почитаю книжку. ) | |
|
|
|
|
|
|
|
для: AlMag
(21.03.2007 в 14:14)
| | Объединить их можно при помощи алгоритма merge(). | |
|
|
|