RosettaCodeData/Task/Power-set/C++/power-set-2.cpp

35 lines
641 B
C++

#include <set>
#include <iostream>
template <class S>
auto powerset(const S& s)
{
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;
}
int main()
{
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";
}
}