Двунаправленный 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) и использовать ее как обычно.

Другие вопросы по тегам