This documentation is automatically generated by online-judge-tools/verification-helper
本ライブラリのいくつかのデータ構造では、一般のモノイドで内部の演算が抽象化されているものがあります。そのようなデータ構造はSrc/Algebra/Monoid/*.hpp
内のクラスや、それらと同様の実装をしたクラスをテンプレート引数で渡すことで利用することができます。
どのクラスも、基本的には以下のような枠組みで実装されています。
template <class T>
class Monoid {
public:
using Element = T;
static constexpr T identity() noexcept {
}
static constexpr T operation(const T& l, const T& r) noexcept {
}
};
template引数 T
上の説明でいう、 $S$ です。例えば $32$ bitで収まる範囲で足し算をしたい時は int
型やzawa::i32 (= std::int32_t)
型を引数に入れることになります。
using Element = T
データ構造等で群の型にアクセスする時に使います。必ず用意してください。
identity
上の説明でいう、単位元を返すメンバです。引数をとらず、 T
型の値を返り値とするメソッドである必要があります。
operation
上の説明でいう、二項演算です。 必ず T
型の変数 $2$ つを引数にとり、 T
型の値を返り値とするメソッドである必要があります。
l, r
の順番に気をつけてくださいnoexcept
は無くても大丈夫です