Le 15/05/12 12:09, Vicente J. Botet Escriba a écrit :
Hi,
I have a bimap
typedef bimap<
multiset_of< tagged< Person*,
consultant> >,
multiset_of< tagged< Company*,
client> >,
with_info< tagged< ConsultancyContract*, contract>
>
> Consultancy;
initialized as follows
Consultancy consultancy;
Person John("John"), Jane("Jane");
Company Dell("Dell"), HP("HP");
ConsultancyContract JohnContractD(10,1);
ConsultancyContract JaneContractD(20, 2);
ConsultancyContract JaneContractH(30, 3);
consultancy.insert(Consultancy::value_type(&Jane, &Dell,
&JaneContractD));
consultancy.insert(Consultancy::value_type(&Jane, &HP,
&JaneContractH));
and I want to remove only the specific association
Jane<->Dell and so I'm using
consultancy.erase(Consultancy::value_type(&Jane,
&Dell));
but then the resulting consultancy bimap is empty, while I expect
the association Jane<->HP to be there yet.
If I add before erasing
consultancy.insert(Consultancy::value_type(&John, &Dell,
&JohnContractD));
and then
consultancy.erase(Consultancy::value_type(&Jane,
&Dell));
all the associations concerning Jane are removed.
What I'm doing wrong? How to erase a single association?
I have reached to get what I was locking for.
I have added set_of_relation<> to the bimap definition
typedef bimap<
multiset_of< tagged< Person*,
consultant> >,
multiset_of< tagged< Company*, client>
>,
with_info< tagged< ConsultancyContract*, contract>
>
,
multiset_of_relation<>
> Consultancy;
Is there another way when the collection of relation is the default
left_based?
I find the default behavior a little bit surprising.
Why provide a erase function requesting the value_type if only the
left side is taken in account?
What is the rationale to have the default left_based? Space
optimization?
It works also with multiset_of_relation. I don't see a use case
for this. When the user could want the same association to be
several times? Could some one give me an example?
Best,
Vicente