
Thorsten Ottosen <thorsten.ottosen <at> dezide.com> writes:
Hi Ion and Joaquín,
Hi Thorsten, sorry for the late answer, been offline this weekend.
This issue is related to node-based containers. I think you both have added emplace() to provide efficient in-place construction.
Boost.MultiIndex does not offer it yet, will do in the future.
However, I often encounter a situation where emplace() is not sufficient for me.
The situation is characterized by the need to calculate the key after the mapped value (a heavy object) has been placed in the pair. To calculate the key the mapped value needs to be modified (the key is calculated as a side-effect).
I therefore suggest that we add a new function:
typedef ... map; map m; map::node_ptr p = m.get_node_ptr(<like emplace, but only for constructing the mapped value>); p->pair.first = modify( p->pair.second ); m.insert( boost::move(p) );
Thoughts?
Why can't you just do the following? map::mapped_type x=...; map::key_type k=modify(x); m.emplace(boost::move(k),boost::move(x)); Joaquín M López Muñoz Telefónica, Investigación y Desarrollo