#pragma once #include "bimap.hh" template bool Bimap::insert(const Lhs& vl, const Rhs& vr) { if (lhs_.contains(vl) || rhs_.contains(vr)) return false; if (lhs_.contains(vl) || !lhs_.insert({ vl, vr }).second) return false; if (rhs_.contains(vr) || !rhs_.insert({ vr, vl }).second) return false; return true; } template bool Bimap::insert(const Rhs& vr, const Lhs& vl) { return insert(vl, vr); } template std::size_t Bimap::erase(const Lhs& vl) { if (lhs_.size() <= 0) return 0; auto range = lhs_.find(vl); if (range == lhs_.end()) return 0; rhs_.erase(range->second); size_t n = lhs_.erase(range->first); return n; } template std::size_t Bimap::erase(const Rhs& vr) { if (lhs_.size() <= 0) return 0; auto range = rhs_.find(vr); if (range == rhs_.end()) return 0; lhs_.erase(range->second); size_t n = rhs_.erase(range->first); return n; } template typename Bimap::iteratorLhs Bimap::find(const Lhs& vl) const { return lhs_.find(vl); } template typename Bimap::iteratorRhs Bimap::find(const Rhs& vr) const { return rhs_.find(vr); } template std::size_t Bimap::size() const { return lhs_.size(); } template void Bimap::clear() { lhs_ = {}; rhs_ = {}; } template const typename Bimap::mapLhs& Bimap::get_lhs() const { return lhs_; } template const typename Bimap::mapRhs& Bimap::get_rhs() const { return rhs_; }