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?