bidirectional map
bioinfornatics
bioinfornatics at fedoraproject.org
Tue Nov 12 07:28:53 PST 2013
On Tuesday, 12 November 2013 at 09:10:07 UTC, Andrea Fontana
wrote:
> On Tuesday, 12 November 2013 at 01:14:47 UTC, bioinfornatics
> wrote:
>> Dear,
>> I am looking for a bidirectional map i.e
>> http://en.wikipedia.org/wiki/Bidirectional_map
>>
>> My seach into D documentation seem to said to me that this
>> structure is not implemented.
>>
>> Something like (for primary idea):
>>
>>
>> struct BidirectionalMap(T,U){
>> private:
>> T[U] _forwardHash;
>> U[T] _reverseHash;
>>
>> public:
>>
>> @safe
>> void opIndeyAssign( T k, U v){ // pure?
>> _forwardHash[k] = v;
>> _reverseHash[v] = k;
>> }
>>
>>
>> @property
>> BidirectionalMap!(T,U) dup(){
>> return BidirectionalMap!(T,U)( this );
>> }
>> }
>
> Maybe we can get a better (faster/lighter) implementation if
> T==U (using sorted (T,T) tuples?)
>
> By the way:
>
> map[10] = 5; // => _forwardHash[10] = 5; _reverseHash[5] =
> 10;
> map[10] = 3; // => _forwardHash[10] = 3; _reverseHash[3] =
> 10;
>
> So:
> _reverseHash[5] == 10; // True, it should not, should it?
Maybe using Variant will allow to use 1 associative array
More information about the Digitalmars-d-learn
mailing list