1 #ifndef FIXEDSIZESUBSETITERATOR_H
2 #define FIXEDSIZESUBSETITERATOR_H
7 #include "../exception/invalidargumentexception.h"
8 #include "../misc/setiterator.h"
39 virtual size_t size()
const;
55 virtual std::set<T*>
set()
const;
61 virtual std::vector<T*>
vector()
const;
75 supersetVector(superset.begin(), superset.end())
77 if(size == 0 || size >= superset.size())
80 std::vector<size_t> empty;
85 supersetVector(superset),
89 if(size == 0 || size > superset.size())
92 std::vector<size_t> empty;
99 if(buildVector.size() > 0)
100 start = buildVector[buildVector.size()-1]+1;
102 for(; start < supersetVector.size(); start++)
104 buildVector.push_back(start);
105 if(buildVector.size() < fixedSize)
106 buildSubsetIndices(buildVector);
108 subsetIndices.push_back(buildVector);
109 buildVector.erase(buildVector.end()-1);
115 return subsetIndices[currentPosition].size();
120 if(currentPosition < subsetIndices.size()-1)
123 throw std::out_of_range(
"No more subsets.");
128 return currentPosition < subsetIndices.size()-1;
134 size_t n = subsetIndices[currentPosition].size();
135 for(
size_t i = 0; i < n; i++)
136 result.insert(supersetVector[subsetIndices[currentPosition][i]]);
143 std::vector<T*> result;
144 size_t n = subsetIndices[currentPosition].size();
145 for(
size_t i = 0; i < n; i++)
146 result.push_back(supersetVector[subsetIndices[currentPosition][i]]);
virtual bool hasMore() const
Returns if the Graycode sequence is incomplete yet or not.
Iterates over all fixed-size subsets of a given superset.
virtual size_t size() const
Size of the current subset.
std::vector< std::vector< size_t > > subsetIndices
std::vector< T * > supersetVector
Base class used to provide iterating over sets.
void buildSubsetIndices(std::vector< size_t > &buildVector)
FixedSizeSubsetIterator(std::set< T * > superset, size_t size)
Provide the superset as a set.
virtual std::vector< T * > vector() const
Returns the current subset as a vector.
virtual std::set< T * > set() const
Returns the current subset as a set.
Indicates invalid values of arguments.
virtual void next()
Generates the next subset.