Hello,
I'm very interested to use multi_index container in my work. But didn't
found
much documentation and\or examples. Maybe anyone could suggest a place
to find
it?
Basically now I'm trying to implement probably very simple thing. There
is
basic structure:
struct AvNode
{
CNode* var;
int context;
MemoryPlace location;
...
};
And I'd like to have
multi_index container with such nodes (all fields are non-equal).
Something
like this:
typedef multi_index_container<
AvNode,
indexed_by<
ordered_non_unique<
tag<varNcontextIndex>,
composite_key<
AvNode,
BOOST_MULTI_INDEX_MEMBER(AvNode,CNode*,var),
BOOST_MULTI_INDEX_MEMBER(AvNode,int,context)
>
>
>
> AvNodeSet;
And then I need to
iterate on this container. Better to say that I'd like to group
elements in
container by first two fields. Could you help me in this problem? In
fact I
have one solution but it's too large and non-fine:
AvNodeSet avNodes;
typedef index<AvNodeSet,
varNcontextIndex>::type AvNodesSet2VarNcontext;
AvNodesSet2VarNcontext& avNodes2VarNcontext =
boost::multi_index::get<varNcontextIndex>(avNodes);
AvNodesSet2VarNcontext::iterator it = avNodes2VarNcontext.begin();
while(it != avNodes2VarNcontext.end())
{
CNode* var = it->var;
AvNodesSet2VarNcontext::iterator it2Var = it;
while( (it2Var
!= avNodes2VarNcontext.end()) && (it2Var ->var== var) )
{
int context = it2Var->context;
FOO(make_pair(var, context));
AvNodesSet2VarNcontext::iterator it2Context = it2Var;
while( (it2Context != avNodes2VarNcontext.end())
&& (it2Context->context == context) )
{
++it2Context;
}
it2Var = it2Context;
}
it = it2Var;
}
Hope for your help...
--
Best regards,
Dmitriy Bure mailto:borech@tepkom.ru