Двунаправленный HashMap в Racket
Есть ли у 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).
Я знаю, что вы можете сделать это, используя две хеш-таблицы, которые инвертированы друг от друга, но я хотел бы, чтобы структура была встроена в Racket (или существующую библиотеку).
0 ответов
Насколько я знаю, ничего подобного нет. Но вы можете использовать одну хеш-таблицу, поставить (K,V) и (V,K) и использовать ее как обычно.