{{No footnotes|date=April 2015}} In computer science, a '''bidirectional map''' is an associative data structure in which the <math>(key, value)</math> pairs form a one-to-one correspondence. Thus the binary relation is functional in each direction: each <math>value</math> can also be mapped to a unique <math>key</math>. A pair <math>(a, b)</math> thus provides a unique coupling between <math>a</math> and <math>b</math> so that <math>b</math> can be found when <math>a</math> is used as a key and <math>a</math> can be found when <math>b</math> is used as a key.

Mathematically, a '''bidirectional map''' can be defined a bijection <math>f: X \to Y</math> between two different sets of keys <math>X</math> and <math>Y</math> of equal cardinality, thus constituting an injective and surjective function:

<math display="block">\begin{cases} & \forall x, x' \in X, f(x) = f(x') \Rightarrow x = x' \\ & \forall y \in Y, \exists x \in X : y=f(x) \end{cases} \Rightarrow \exists f^{-1}(x)</math>

==External links== * [http://www.boost.org/doc/libs/1_47_0/libs/bimap/doc/html/index.html Boost.org] * [https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/BidiMap.html Commons.apache.org] * [https://web.archive.org/web/20120205111646/http://cablemodem.fibertel.com.ar/mcape/oss/projects/mc_projects/boost_projects/boost_bimap.html Cablemodem.fibertel.com.ar (archived version)] * [http://www.codeproject.com/KB/stl/bimap.aspx Codeproject.com] * [https://google.github.io/guava/releases/19.0/api/docs/com/google/common/collect/BiMap.html BiMap in the Google Guava library] * [https://bidict.readthedocs.io/ bidict (bidirectional map implementation for Python)] * [https://github.com/iiKuzmychov/BidirectionalDictionary BidirectionalDictionary (bidirectional map implementation for C#)]

Category:Associative arrays

{{datastructure-stub}}