> Date: Thu, 23 Oct 2008 16:50:15 +0200
> From: firstname.lastname@example.org
> To: email@example.com
> Subject: Re: [Boost-users] [multi_index] doing insert() within iteration over equal_range() result?
> Prometheus Prometheus escribió:
>> Hi all,
>> i have the following problem:
>> i use multi_index like this
>> std::pair range;
>> range = this->events.get().equal_range(boost::make_tuple(event,condition));
>> // CALL an event handler!
>> this->callEventHandler(range.first); // << this shows just how it works, its not exactly my code
>> within the callEventHandler and its called functions its possible that the event handler wants to register new events which results to this:
>> The problem is OR can be, that the insert modifies the indices which modify the range.first iterators and thus a ++range.first results in an invalid "next" element
>> this makes sense and i think most of you know this and had this problem already
>> Does anyone have a good idea/solution how to solve this situation correctly so that the range i received will be valid?
> I think the easiest solution is to save copies of the iterators in range
> before you
> start the loop:
> range = this->events.get().equal_range(boost::make_tuple(event,condition));
> std::vector buff;
> for(std::size_t n=0,s=buff.size();n // CALL an event handler!
> Joaquín M López Muñoz
> Telefónica, Investigación y Desarrollo
hmm, great and easy solution, thx!
but just to get better knowledge of (boost) iterators
1. what distinguishes 2 iterators of the same type?
to ask it differently: given are 2 multi_index objects storing the same information
2. find() using the same search values will give me results on both objects - can i store the iterators in a vector OR a std::set without a problem? or will there be conflicts between the iterators, cause they are pointing to the same datatype?
3. is obj1.end()==obj2.end() true?
thx @ ll Discover the new Windows Vista Learn more!