#include <iostream>
#include <set>
#include <algorithm>
using namespace std;

class remover {
	std::set<int> &s;
public:
    remover(std::set<int>& theSet) : s(theSet) {}
    void operator()(int val) { s.erase(val); }
};

int main() {
    std::set<int> set1, set2;

    set1.insert(1); set1.insert(2); set1.insert(3); set1.insert(4); set1.insert(5);
    set2.insert(4); set2.insert(6);

    for_each(set2.begin(), set2.end(), remover(set1));

    // Print result: // Expect 1 2 3 5
    std::cout << "set1: ";
    for (std::set<int>::const_iterator it=set1.begin(); it != set1.end(); it++)
    {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    return 0;
}