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!