Container-abstracted permutation. More...
#include <Permutations.h>
Public Types | |
| using | Sigma = std::vector< unsigned > | 
Public Member Functions | |
| Permutation (Sigma p) | |
| template<typename T , std::enable_if_t< std::is_convertible< T, unsigned >::value, int > * = nullptr> | |
| Permutation (std::initializer_list< T > vs) | |
| Permutation (const std::size_t N, std::size_t i) | |
| Construct the i-th permutation of size N.  | |
| bool | next () | 
| bool | prev () | 
| unsigned | index () const | 
| unsigned | indexOf (unsigned v) const | 
| Permutation | inverse () const | 
| auto | at (const unsigned i) const -> decltype(auto) | 
| auto | operator() (const unsigned i) const -> decltype(auto) | 
| void | push () | 
| void | clear () | 
| unsigned | size () const | 
| template<typename OtherContainer > | |
| OtherContainer | apply (const OtherContainer &other) const | 
| Permutation | compose (const Permutation &other) const | 
| Compose two permutations.  More... | |
| auto | tie () const | 
  Public Member Functions inherited from Scine::Molassembler::Temple::Crtp::LexicographicComparable< Permutation > | |
| constexpr bool | operator== (const LexicographicComparable &other) const | 
| constexpr bool | operator!= (const LexicographicComparable &other) const | 
| constexpr bool | operator< (const LexicographicComparable &other) const | 
| constexpr bool | operator<= (const LexicographicComparable &other) const | 
| constexpr bool | operator> (const LexicographicComparable &other) const | 
| constexpr bool | operator>= (const LexicographicComparable &other) const | 
Static Public Member Functions | |
| static Permutation | identity (unsigned N) | 
| Construct the identity permutation of size N.  | |
| template<typename Container > | |
| static std::enable_if_t <!std::is_same< Container, Sigma >::value, Permutation >  | from (const Container &p) | 
| Construct a permutation from data (unchecked!)  | |
| template<typename Container > | |
| static std::enable_if_t < std::is_same< std::decay_t < Container >, Sigma >::value, Permutation >  | from (Container &&p) | 
| template<typename OtherContainer > | |
| static Permutation | ordering (const OtherContainer &unordered) | 
| Discover on ordering permutation of an unordered container.  | |
  Static Public Member Functions inherited from Scine::Molassembler::Temple::Crtp::LexicographicComparable< Permutation > | |
| 
static constexpr const  Permutation &  | derived (const LexicographicComparable &base) | 
Data Fields | |
| Sigma | sigma | 
| The permutation in 'one-line' representation.  | |
Container-abstracted permutation.
Permutations contain only non-negative integers, with each number up less than its length used once. This class can be used only to represent permutations of sequences of a set of items, not of a multiset (with repeated elements).
| Container | implementing begin/end, at and size methods. If these methods of the container are constexpr, then this class is constexpr. | 
The permutation itself represented in one-line 'notation'. E.g. a vector containing the indices 0, 3, 2, 1 represents the permutation with p(0) = 0, p(1) = 3, p(2) = 2 and p(3) = 1.
      
  | 
  inline | 
Compose two permutations.
The resulting permutation of this composition applies this first, then other. Note that composition is not commutative!