I have some difficulties understanding how Boost.MultiIndex is implemented. Lets say I have the following:
typedef multi_index_container<
employee,
indexed_by<
ordered_unique<member<employee, std::string, &employee::name> >,
ordered_unique<member<employee, int, &employee::age> >
>
> employee_set;
I imagine that I have one array, Employee[], which actually stores the employee objects, and two maps
map<std::string, employee*>
map<int, employee*>
with name and age as keys. Each map has employee* value which points to the stored object in the array. Is this ok?
A short explanation on the underlying structure is given here, quoted below:
The implementation is based on nodes interlinked with pointers, just as say your favorite
std::setimplementation. I’ll elaborate a bit on this: Astd::setis usually implemented as an rb-tree where nodes look likeWell, a
multi_index_container‘s node is basically a “multinode” with as many headers as indices as well as the payload. For instance, amulti_index_containerwith two so-called ordered indices uses an internal node that looks like(The reality is more complicated, these nodes are generated through some metaprogramming etc. but you get the idea) […]