Boost logo

Boost Users :

From: JOAQUIN LOPEZ MU?Z (joaquin_at_[hidden])
Date: 2005-10-29 07:51:26


----- Mensaje original -----
De: Adi Shavit <adish_at_[hidden]>
Fecha: Viernes, Octubre 28, 2005 4:11 pm
Asunto: [Boost-users] [multi_index] non-intrusive keys

> Hi,
>
> In my application I used a multi_map of multi_maps as a data
> structure to provide indexing with 2 keys, say long strings. Access
> is
> logarithmic on both keys and the keys are not part of the stored
> object,
> thus are potentially only stored once.
>
> I'd like to use multi_index as a more elegant replacement.
> However, I'm not clear about where the keys are stored.
>
> In my app, the keys are stored separately from the data, as the
> keys to
> maps, as part of the map data structure.
> It seems that in multi_index the keys have to be inside the stored
> data.In this case, 10 objects with the same key(s) will all have to
> hold
> copies of the keys (as members).
>
> Is there a way to avoid this?
>

I don't think you can avoid duplication of keys --if the
keys are really expensive to duplicate, you might consider
holding shared_ptrs to them, but this is AFAICS the furthest
you can get.

Take into acount that a multi_index_container with two keys
is not a map of maps. These are different beasts, serving different
purposes,

* a map of maps applies two concatenated lookups to get
to a "terminal" object,
* a multi-index container with two indices applies either one
of two poosible lookups to get to the object,

so you might want to ask yourself whether it makes sense
to try to replace your current code with Boost.MultiIndex.
What are the advantages / use cases you envision?

Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net