Perm

template<size_t N = 0, typename Scalar = std::conditional_t<N == 0, uint32_t, typename SmallestInteger<N>::type>>
class Perm : public libsemigroups::Transf<0, std::conditional_t<0 == 0, uint32_t, typename SmallestInteger<0>::type>>

Defined in transf.hpp.

A permutation \(f\) is an injective transformation defined on the whole of \(\{0, 1, \ldots, n - 1\}\) for some integer \(n\) called the degree of \(f\). A permutation is stored as a vector of the images of \((0, 1, \ldots, n - 1)\), i.e. \(((0)f, (1)f, \ldots, (n - 1)f)\).

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.

Note

Perm has the same member functions as StaticPTransf and DynamicPTransf, this isn’t current reflected by the contents of this page.

Template Parameters
  • N – the degree (default: 0)

  • Scalar – an unsigned integer type (the type of the image values)

Member types

container_type

Type of the underlying container.

value_type

Type of the image values.

Static member functions

identity() const

Returns the identity permutation on degree() points.

identity(size_t)

Returns the identity permutation on the given number of points.

make(T&&)

Construct from image list and validate.

make(std::initializer_list<value_type>&&)

Construct from a container and validate.

Member functions

inverse() const

Returns the inverse.

product_inplace(Transf const&, Transf const&)

Multiply two transformations and store the product in this.