1 #ifndef SUBSETITERATOR_H
2 #define SUBSETITERATOR_H
6 #include "../misc/setiterator.h"
7 #include "../misc/flippinggraycodebits.h"
36 virtual size_t size()
const;
52 virtual std::set<T*>
set()
const;
58 virtual std::vector<T*>
vector()
const;
69 supersetVectorSize(superset.size()),
71 supersetVector(superset.begin(), superset.end())
76 supersetVector(superset),
77 supersetVectorSize(superset.size()),
89 size_t element = gcs.current();
90 if(element < supersetVectorSize)
92 if(currentSubset.find(supersetVector[element]) != currentSubset.end())
94 currentSubset.erase(supersetVector[element]);
99 currentSubset.insert(supersetVector[element]);
106 throw std::out_of_range(
"No more subsets.");
112 if(gcs.current() < supersetVectorSize)
120 return currentSubset;
125 return std::vector<T*> (currentSubset.begin(), currentSubset.end());
virtual void next()
Generates the next subset.
Returns the bits flipped in a Graycode sequence.
virtual std::vector< T * > vector() const
Returns the current subset as a vector.
virtual size_t size() const
Size of the current subset.
SubsetIterator(std::set< T * > superset)
Provide the superset as a set.
Base class used to provide iterating over sets.
std::vector< T * > supersetVector
size_t supersetVectorSize
std::set< T * > currentSubset
virtual bool hasMore() const
Returns if the Graycode sequence is incomplete yet or not.
Iterates over all subsets of a given superset.
virtual std::set< T * > set() const
Returns the current subset as a set.