From: Andy Glew (glew_at_[hidden])
Date: 1999-10-08 01:15:02
Oh, I forgot to mention: in my own work,
my relations are usually not between scalar keys,
but are between objects, as in
You can grossly encapsulate this, if you make the fairly
universal but nonetheless ugly assumption that
is interconvertible with
with suitable casts
thereby avoiding the mutual recursion in the definition.
Also, I wasted a lot of time trying to make
Left.rightptr = &Right
automatically update Right.leftptr, and vice versa.
In terms of your problem, that would be like saying
map2way.forward_map[key] = value
automatically adding pair<ValueType,KeyType>(value,key)
to the reverse_map.
I eventually figured out how to do it, but it is kind of gross,
requiring what amounts to subtracting the offset of a member
from the member's address, to arrive at a pointer to the object
containing the member. Works everywhere I have tried it,
but I don't think that it is guaranteed to be portable.
I think that it is better to define a linking operation
reln_1_to_N::link( KeyType k, ValueType v )
and just use the array [ ] notation for lookup.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk