Boost logo

Boost :

Subject: [boost] [interprocess][multi_index] emplace() is not sufficient for maps
From: Thorsten Ottosen (thorsten.ottosen_at_[hidden])
Date: 2009-07-24 09:49:02


Hi Ion and Joaquín,

This issue is related to node-based containers. I think you both have
added emplace() to provide efficient in-place construction.

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?

-Thorsten


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk