23template <
typename K,
typename V>
class ConstBidirectionalMap
25 std::unordered_map<K, V> key_to_val_;
26 std::unordered_map<V, K> val_to_key_;
29 ConstBidirectionalMap (std::initializer_list<std::pair<K, V>> list)
31 for (
const auto &[key, val] : list)
36 void insert (
const K &key,
const V &val)
38 key_to_val_.insert ({ key, val });
39 val_to_key_.insert ({ val, key });
42 std::optional<V> find_by_key (
const K &key)
const
44 if (
auto it = key_to_val_.find (key); it != key_to_val_.end ())
49 std::optional<K> find_by_value (
const V &val)
const
51 if (val_to_key_.contains (val))
53 return val_to_key_.at (val);