Boris ha escrito:
On Wed, 21 Feb 2007 19:10:03 +0200, Joaquín Mª López Muñoz
wrote:
[...]
m2.modify(it2,null_modifier());
which forces reindexation without actually touching *it2. Is this what you're after? Thanks for using Boost.MultiIndex,
Okay, thanks! I thought there might be something else like m2.refresh(). It would be nice if the multi_index_container provided such a method as you could change objects hold by the container directly (not through multi_index_container methods) and then make the container recreate the indexes.
First of all, one important note of warning: externally modifying elements is an outright violation of Boost.MultiIndex invariant contract, so strictly speaking it results in undefined behavior --even if you resync right after the modification as I've shown in my previous post. Given that premise, a refresh() facility cannot even be formulated as it'd operate on a basically broken container! That said, you can force the container to fully recreate its indices after massive modification with the following non-documented, non-supported trick: // modify elements thru m1 ... // force index recreation on m2 // mic_t2 is the type of m2 mic_t2 tmp(m2.begin(),m2.end()); m2.swap(tmp); I'm almost regretting having posted this trick :) since all of this is really completely unguaranteed behavior --so if you can do things in a safer fashion please go that way.
Thanks for your nice library, :) Boris
You're welcome. Joaquín M López Muñoz Telefónica, Investigación y Desarrollo