Boost logo

Boost :

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

    multi_map<Producer*,Consumer*> forward_map;
    map<Consumer*,Producer*> reverse_map;

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, gregod at, cpdaniel at, john at