creating subset using bitmasking code example
Example 1: c++ generate all subsets
#include <vector>
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int len = 5;
int values[] = {3, 4, 2, 8, 5};
vector<vector<int>> subsets;
for (int i = 0; i < pow(2, len); i++) {
int t = i;
vector<int> v;
for (int j = 0; j < len; j++) {
if (t & 1)
v.push_back(values[j]);
t >>= 1;
}
subsets.push_back(v);
}
cout << "subsets:\n";
for (const vector<int>& subset: subsets) {
for (const int& value: subset)
cout << value << " ";
cout << "\n";
}
}
Example 2: print all unique subsets
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void printVector(vector<int> const &out)
{
for (int i: out)
cout << i << " ";
cout << '\n';
}
void findPowerSet(int S[], vector<int> &out, int i)
{
if (i < 0)
{
printVector(out);
return;
}
out.push_back(S[i]);
findPowerSet(S, out, i - 1);
out.pop_back();
while (S[i] == S[i-1])
i--;
findPowerSet(S, out, i - 1);
}
int main()
{
int S[] = { 1, 3, 1 };
int n = sizeof(S) / sizeof(S[0]);
sort(S, S + n);
vector<int> out;
findPowerSet(S, out, n-1);
return 0;
}