Write a method that returns all subsets of a set.
#include <iostream>
#include <set>
#include <queue>
using namespace std;
template<typename T> void copy_set(set<T> &ds, set<T> &ss)
{
set<T>::iterator it;
for(it = ss.begin(); it != ss.end(); ++it){
ds.insert(*it);
}
}
template<typename T> void print_set(set<T> &s)
{
copy(s.begin(), s.end(), ostream_iterator<T>(cout, " "));
cout << endl;
}
template<typename T> void list_subset(set<T> &ss, set<T> &sr)
{
if(sr.empty() && ss.empty()){
return;
}
if(sr.empty()){
print_set(ss);
return;
}
else{
set<T>::iterator it = sr.begin();
T a = *it;
set<T> t1, t2, t3, t4;
copy_set(t1, ss);
copy_set(t3, sr);
t1.insert(a);
t3.erase(a);
list_subset(t1, t3);
copy_set(t2, ss);
copy_set(t4, sr);
t4.erase(a);
list_subset(t2, t4);
}
}
int main(int argc, char* argv[])
{
set<char> s,ss;
s.insert('a');
s.insert('b');
s.insert('c');
s.insert('d');
list_subset(ss, s);
return 0;
}
Output
a b c d
a b c
a b d
a b
a c d
a c
a d
a
b c d
b c
b d
b
c d
c
d