Форум: Форум C++Разное
Новые темы: 00
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Скажите, какие операции есть над множествами есть С++?
 
 автор: AlMag   (19.03.2007 в 19:59)   письмо автору
 
 

Скажите, какие операции есть над множествами есть С++?
Я знаю такие

вставить
удалить
узнать размер...

А мне надо все. Ну, например

узнать, есть ли такой элемент в множестве
найти пересечение 2-ч множеств
объединение ~
вычитание ~
и др.

Подскажите.

  Ответить  
 
 автор: oleg_alexeev   (19.03.2007 в 20:43)   письмо автору
 
   для: AlMag   (19.03.2007 в 19:59)
 

В самом языке С++ нет типа данных "множество". Соответственно нет и операций над ними.
Но в стандартной библиотеке шаблонов STL есть два подходящих шаблонных класса:
set и multiset (множество и мультимножество). Второй отличается от первого тем, что элементы
в нем могут повторяться. Такие операции как вставить, удалить, узнать размер, узнать есть ли
такой элемент в множестве - там есть. А такие операции как найти пересечение, объединение,
вычитание двух множеств придется реализовать самому, но это вроде бы дело не хитрое.

Про STL можно почитать в книге Джосьютиса. Книгу можно скачать с сайта.

  Ответить  
 
 автор: cheops   (19.03.2007 в 23:19)   письмо автору
 
   для: oleg_alexeev   (19.03.2007 в 20:43)
 

STL включает внешние алгоритмы реализующие объединение, пересечение, вычитание, для это предназначены алгоритмы set_union(), set_intersection, set_difference(), соответственно. Однако эти алгоритмы предназначены для упорядоченных интервалов, к которым множество не относится.
Все перечисленные операции для произвольного контейнера обычно осуществляют через алгоритм merge(), который объединяет два интервала по правилу, заданному предикатом.

  Ответить  
 
 автор: oleg_alexeev   (20.03.2007 в 08:36)   письмо автору
 
   для: cheops   (19.03.2007 в 23:19)
 

Намотаем на ус :))
Спасибо.

  Ответить  
 
 автор: AlMag   (21.03.2007 в 14:14)   письмо автору
 
   для: oleg_alexeev   (20.03.2007 в 08:36)
 

Спасибо. Да, я как раз имел в виду STL и set.
Просто я столкнулся с тем, что не знаю, как объединить 2 множества. Подумал, что в STL
есть такая ф-ция, что бы вручную не писать, но раз нет, так нет.
Почитаю книжку. )

  Ответить  
 
 автор: cheops   (21.03.2007 в 14:26)   письмо автору
 
   для: AlMag   (21.03.2007 в 14:14)
 

Объединить их можно при помощи алгоритма merge().

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования