# 7.8. Performing Set Operations on Sequences

## Problem

You have sequences that you want to rearrange using set operations like `union`, `difference`, or `intersection`.

## Solution

Use the standard library functions built for exactly this purpose: `set_union` , `set_dif-ference` , and `set_intersection` . Each of these performs its respective set operation and places the results in an output range. See how to do this in Example 7-8.

Example 7-8. Using set operations

```#include <iostream>
#include <algorithm>
#include <string>
#include <set>
#include <iterator>
#include "utils.h" // For printContainer(): see 7.10

using namespace std;

int main() {

cout << "Enter some strings: ";
istream_iterator<string> start(cin);
istream_iterator<string> end;
set<string> s1(start, end);

cin.clear();

cout << "Enter some more strings: ";
set<string> s2(++start, end);

set<string> setUnion;
set<string> setInter;
set<string> setDiff;

set_union(s1.begin(), s1.end(),
s2.begin(), s2.end(),
inserter(setUnion, setUnion.begin()));

set_difference(s1.begin(), s1.end(),
s2.begin(), s2.end(),
inserter(setDiff, setDiff.begin()));

set_intersection(s1.begin(), s1.end(),
s2.begin(), s2.end(),
inserter(setInter, setInter.begin()));

cout << "Union:\n";
printContainer(setUnion);
cout << "Difference:\n";
printContainer(setDiff);
cout << "Intersection:\n";
printContainer(setInter);
}```

The output to this program looks like this (`printContainer` just prints the contents of a container):

`Enter some strings: a b c d ^Z Enter some more strings: d e ...`

Get C++ Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.