Documentation of CSL
multipermutation.h
1 #pragma once
2 
3 #include <vector>
4 
5 namespace csl {
6 
8 
9  public:
10 
11  MultiPermutation(std::vector<std::vector<size_t>> const &t_numbers);
12 
13  MultiPermutation(MultiPermutation const &other) = delete;
14  MultiPermutation &operator=(MultiPermutation const &other) = delete;
15 
16  MultiPermutation(MultiPermutation &&other) = default;
17  MultiPermutation &operator=(MultiPermutation &&other) = default;
18 
19  bool nextPermutation();
20 
21  template<class T>
22  std::vector<T> applyPermutation(std::vector<T> const &collection)
23  {
24  std::vector<T> res(collection);
25  for (size_t i = 0; i != m_numbers.size(); ++i) {
26  assert(m_numbers_init[i] < collection.size()
27  && m_numbers[i] < collection.size());
28  res[m_numbers_init[i]] = collection[m_numbers[i]];
29  }
30  return res;
31  }
32 
33  void print() const;
34 
35  private:
36 
37  void load(std::vector<std::vector<size_t>> const &t_numbers);
38 
39  private:
40 
41  std::vector<size_t> m_numbers;
42  std::vector<size_t> m_numbers_init;
43  std::vector<std::vector<size_t>::iterator> m_boundaries;
44  };
45 
46 }
Namespace for csl library.
Definition: abreviation.h:34
Definition: multipermutation.h:7