19 #include <unordered_set>
25 : min_element(0), max_element(size - 1)
27 contents.resize(
size);
28 std::iota(contents.begin(), contents.end(), 0);
32 const size_t min_element,
const size_t max_element)
33 : min_element(min_element), max_element(max_element)
37 contents.resize(
size);
38 std::iota(contents.begin(), contents.end(),
min_element);
51 this->contents == other.contents);
68 std::unordered_set<size_t> elems;
70 for (
auto &el : contents) {
72 elems.find(el) != elems.end()) {
99 const size_t slice_min_element,
const size_t slice_max_element)
const
103 slice_min_element <= slice_max_element &&
107 this->contents.begin() + (slice_min_element -
min_element),
108 this->contents.begin() + (slice_max_element -
min_element) + 1,
109 result.contents.begin());
119 return std::next_permutation(contents.begin(), contents.end());
124 return std::random_shuffle(contents.begin(), contents.end());