C++ разность множеств STL

63
задан hivert 25 April 2014 в 06:49
поделиться

6 ответов

Да существует, это находится в <algorithm> и названо: std::set_difference . Использование:

#include <algorithm>
#include <set>
#include <iterator>
// ...
std::set<int> s1, s2;
// Fill in s1 and s2 with values
std::set<int> result;
std::set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(),
    std::inserter(result, result.end()));

В конце, набор result будет содержать s1-s2.

127
ответ дан PierreBdR 24 November 2019 в 16:13
поделиться

Да, существует функция set_difference в заголовке алгоритмов.

Редактирования:

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

, Поскольку другие упомянули, это - внешний алгоритм, не метод. По-видимому, это хорошо для Вашего приложения.

11
ответ дан Mr Fooz 24 November 2019 в 16:13
поделиться

Не "оператор" в смысле языка, но в стандартной библиотеке существует set_difference алгоритм:

http://www.cplusplus.com/reference/algorithm/set_difference.html

, Конечно, другие основные операции присвоения присутствуют также - (объединение и т.д.), как предложено разделом "See also" в конце связанной статьи.

4
ответ дан philsquared 24 November 2019 в 16:13
поделиться

Не как метод, но существует внешний set_difference

template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_difference(InputIterator1 first1, InputIterator1 last1,
                              InputIterator2 first2, InputIterator2 last2,
                              OutputIterator result);

http://www.sgi.com/tech/stl/set_difference.html

функции алгоритма
1
ответ дан Ian G 24 November 2019 в 16:13
поделиться

По-видимому, это делает.

SGI - set_difference

1
ответ дан LeppyR64 24 November 2019 в 16:13
поделиться

Выбранный ответ правильный, но есть некоторые синтаксические ошибки.

Вместо

#include <algorithms>

используйте

#include <algorithm>

Вместо

std::insert_iterator(result, result.end()));

используйте

std::insert_iterator<set<int> >(result, result.end()));
2
ответ дан 24 November 2019 в 16:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: