Defined in transf.hpp.
A partial permutation \(f\) is just an injective partial transformation, which is stored as a container of the images of \(\{0, 1, \ldots, n - 1\}\), i.e. \(((0)f, (1)f, \ldots, (n - 1)f)\) where the value UNDEFINED is used to indicate that \((i)f\) is undefined (i.e. not among the points where \(f\) is defined).
If N is 0 (the default), then the degree of a PPerm instance can be defined at runtime, and if N is not 0, then the degree is fixed at compile time.
If N is 0, then the default value of Scalar is uint32_t. If N is not 0, then the default value of Scalar is the smallest integer type able to hold N. See also SmallestInteger.
| N | the degree (default: 0). |
| Scalar | an unsigned integer type (the type of the image values) (default: uint32_t). |
This class inherits from either StaticPTransf or DynamicPTransf, see the documentation of these classes for more details of the available member functions.
Public Types | |
| using | container_type = typename base_type::container_type |
| Type of the underlying container. | |
| using | point_type = Scalar |
| Type of the image values. | |
Public Member Functions | |
| PPerm (std::initializer_list< point_type > dom, std::initializer_list< point_type > img, size_t M) | |
| Construct from domain, range, and degree. | |
| template<typename OtherScalar> | |
| PPerm (std::vector< OtherScalar > const &dom, std::vector< OtherScalar > const &img, size_t M) | |
| Construct from domain, range, and degree. | |
| void | product_inplace (PPerm const &f, PPerm const &g) |
Multiply two partial perms and store the product in this. | |
Static Public Member Functions | |
| static PPerm | one (size_t M) |
| Returns the identity transformation on the given number of points. | |
| using container_type = typename base_type::container_type |
In this case, this is PTransf<N, Scalar>::container_type.
| using point_type = Scalar |
Also the template parameter Scalar.
| PPerm | ( | std::vector< OtherScalar > const & | dom, |
| std::vector< OtherScalar > const & | img, | ||
| size_t | M ) |
Constructs a partial perm of degree M such that f[dom[i]] = img[i] for all i and which is UNDEFINED on every other value in the range \([0, M)\).
| OtherScalar | the type of the points in dom and img. |
| dom | the domain. |
| img | the range. |
| M | the degree. |
dom.
|
inline |
Constructs a partial perm of degree M such that f[dom[i]] = img[i] for all i and which is UNDEFINED on every other value in the range \([0, M)\).
| OtherScalar | the type of the points in dom and img. |
| dom | the domain. |
| img | the range. |
| M | the degree. |
dom.
|
inlinestaticnodiscard |
This function returns a newly constructed transformation with degree equal to M that fixes every value from 0 to M.
| M | the degree. |
Transf.| LibsemigroupsException | if IsStatic<Transf> is true, and M is not the same as the template parameter N. |
| void product_inplace | ( | PPerm< N, Scalar > const & | f, |
| PPerm< N, Scalar > const & | g ) |
Replaces the contents of this by the product of f and g.
| f | a partial perm. |
| g | a partial perm. |
f or g.f and g have different degrees, then bad things will happen.