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?






Reply via email to