Racket には双方向のハッシュマップがありますか?
つまり、キーを与えて値を調べるか、値を与えてキーを調べることができるハッシュ マップは一定時間でしょうか? 次のような API があれば幸いです。
#lang racket
(define my-map (bidirectional-hash '(key1 val1) '(key2 val2)))
(bidirectional-hash-ref my-map 'key 'key1) ; => val1
(bidirectional-hash-ref my-map 'val 'val2) ; => key2
記号key
と記号val
は、val が与えられてキーを探していること、またはキーが与えられて val を探していることをハッシュ マップに伝えます。どちらの場合も、これを一定の O(1) 時間で実行したいと考えています。
互いに反転した 2 つのハッシュ テーブルを使用することでこれを実現できることはわかっていますが、Racket (または既存のライブラリ) に組み込まれた構造が必要です。