Boost logo

Boost Users :

Subject: Re: [Boost-users] Update the index of a hashed_non_unique entry in boost::multiindex
From: Dominique Devienne (ddevienne_at_[hidden])
Date: 2016-10-24 02:43:33


On Mon, Oct 24, 2016 at 6:35 AM, Ram <sourceopen_at_[hidden]> wrote:

>
> I have a boost::multiindex container which has an index as follows :
>
> boost::multi_index::hashed_non_unique<
>
> boost::multi_index::tag<IndexByNonUniqueId>,
>
> boost::multi_index::const_mem_fun<StoredObj, std::string,
> &StoredObj::getNonUniqueIdString>
>
> >
>
> This ID comes in as ""(empty string) when I initially get the object. I
> add it to the multiindex at this point. But later in the course of the
> program the ID gets populated using its "setNonUniqueId" method. At this
> point of time inside "setNonUniqueId" I would like to update the index to
> the object(in the multiindex) as well(while the ID is being updated from ""
> to something concrete). How do I do this? How do I locate the specific
> object and update the index
>

You must notify the BMI of the change, or more exactly, you must do the
change
via the index's modify() [1] method. Don't update the field first, since
that changes the hash
behind the BMI's back, breaking its invariants. While working on this code,
you may want
to set this define [3] in debug builds to catch such invariant-breaking
mistakes.
Update the field via the functors you pass to the index's modify() method.

You do need an iterator to pass to modify(), and for that you typically use
one of your unique indexes,
which you then project() [2] into the non-unique index you want to update.
--DD

[1]
http://www.boost.org/doc/libs/1_62_0/libs/multi_index/doc/reference/hash_indices.html#modifiers

[2]
http://www.boost.org/doc/libs/1_62_0/libs/multi_index/doc/reference/multi_index_container.html#projection
[3]
http://www.boost.org/doc/libs/1_62_0/libs/multi_index/doc/tutorial/debug.html#invariant_check



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