I have some difficulties understanding how Boost.MultiIndex is implemented. Lets say I have the following:
typedef multi_index_container<
employee,
Conceptually, yes.
From what I understand of Boost.MultiIndex (I've used it, but not seen the implementation), your example with two ordered_unique
indices will indeed create two sorted associative containers (like std::map
) which store pointers/references/indices into a common set of employee
s.
In any case, every employee
is stored only once in the multi-indexed container, whereas a combination of map
and map
would store every employee twice.
It may very well be that there is indeed a (dynamic) array inside some multi-indexed containers, but there is no guarantee that this is true:
[Random access indices] do not provide memory contiguity, a property of
std::vector
s by which elements are stored adjacent to one another in a single block of memory.
Also, Boost.Bimap is based on Boost.MultiIndex and the former allows for different representations of its "backbone" structure.