2013-04-10 23:57:08 -07:00
|
|
|
#include <set>
|
2015-11-18 06:14:39 +00:00
|
|
|
#include <iostream>
|
2013-04-10 23:57:08 -07:00
|
|
|
|
2015-11-18 06:14:39 +00:00
|
|
|
template <class S>
|
|
|
|
|
auto powerset(const S& s)
|
2013-04-10 23:57:08 -07:00
|
|
|
{
|
2015-11-18 06:14:39 +00:00
|
|
|
std::set<S> ret;
|
|
|
|
|
ret.emplace();
|
|
|
|
|
for (auto&& e: s) {
|
|
|
|
|
std::set<S> rs;
|
|
|
|
|
for (auto x: ret) {
|
|
|
|
|
x.insert(e);
|
|
|
|
|
rs.insert(x);
|
|
|
|
|
}
|
|
|
|
|
ret.insert(begin(rs), end(rs));
|
|
|
|
|
}
|
|
|
|
|
return ret;
|
2013-04-10 23:57:08 -07:00
|
|
|
}
|
2015-11-18 06:14:39 +00:00
|
|
|
|
|
|
|
|
int main()
|
2013-04-10 23:57:08 -07:00
|
|
|
{
|
2015-11-18 06:14:39 +00:00
|
|
|
std::set<int> s = {2, 3, 5, 7};
|
|
|
|
|
auto pset = powerset(s);
|
|
|
|
|
|
|
|
|
|
for (auto&& subset: pset) {
|
|
|
|
|
std::cout << "{ ";
|
|
|
|
|
char const* prefix = "";
|
|
|
|
|
for (auto&& e: subset) {
|
|
|
|
|
std::cout << prefix << e;
|
|
|
|
|
prefix = ", ";
|
|
|
|
|
}
|
|
|
|
|
std::cout << " }\n";
|
|
|
|
|
}
|
2013-04-10 23:57:08 -07:00
|
|
|
}
|