Да существует, это находится в <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
.
Да, существует функция set_difference в заголовке алгоритмов.
Редактирования:
к вашему сведению, структура данных набора в состоянии эффективно использовать тот алгоритм, как указано в документация . Алгоритм также работает не только над наборами, но и над любой парой итераторов по отсортированным наборам.
, Поскольку другие упомянули, это - внешний алгоритм, не метод. По-видимому, это хорошо для Вашего приложения.
Не "оператор" в смысле языка, но в стандартной библиотеке существует set_difference алгоритм:
http://www.cplusplus.com/reference/algorithm/set_difference.html
, Конечно, другие основные операции присвоения присутствуют также - (объединение и т.д.), как предложено разделом "See also" в конце связанной статьи.
Не как метод, но существует внешний set_difference
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_difference(InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result);
функции алгоритма Выбранный ответ правильный, но есть некоторые синтаксические ошибки.
Вместо
#include <algorithms>
используйте
#include <algorithm>
Вместо
std::insert_iterator(result, result.end()));
используйте
std::insert_iterator<set<int> >(result, result.end()));