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

35 lines
641 B
C++
Raw Permalink Normal View History

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
}