7K blog

猫でも分かる何か

対合写像 lib_involution

概要

f(f(x))=x となる写像

メンバ関数
  • template <class T, class U>class lib_involution(ll sa, ll sb); コンストラク

集合saと集合sbの対合写像を作成する(sa,sbはenumを利用するのがオススメ)

  • vo add(T xa, U xb); f(xa)=xb,f(xb)=xa となる写像を追加する
  • au f(ll s, au x); 集合sの要素xの対応先を返す
ライブラリ
template<class T, class U>class lib_involution {
	map<T,U> f_xa;
	map<U,T> f_xb;
	ll set_a;
	ll set_b;
public:
	lib_involution(ll sa, ll sb):set_a(sa),set_b(sb) {}
	vo add(T xa, U xb) { f_xa[xa]=xb,f_xb[xb]=xa; }
	au f(ll s, au x) { return (s==set_a)?f_xa[x]:f_xb[x]; }
};