Boost logo

Boost :

Subject: Re: [boost] [interprocess][multi_index] emplace() is not sufficient for maps
From: Thorsten Ottosen (thorsten.ottosen_at_[hidden])
Date: 2009-08-22 06:23:40

Ion Gaztañaga skrev:
> Thorsten Ottosen escribió:

>>> Is it too expensive to use move insertion from a type with non-const
>>> key?
>>> //note that key is non-const!
>>> std::pair<key_type, value_type> v(/**/);
>>> m.insert(boost::move(v));
>> Yes, because the mapped object is not fast to move. The way I code
>> around it currently is to allocate all state in an object on the heap.
>> I then do
>> PriorityMap::iterator i = open_.emplace( &nodes_.back() );
>> i->second.swap( newData );
>> since swap is now efficient. But it is still not optimally efficient.
> Ok, I'll think about it. And you can't implement "move" on top of of
> "swap" to make it efficient (although not optimal, obviously)?

no. See below.

> And I'm curious to know why move construction is expensive. Some c-array
> members, maybe?.

A stack-based adjacency matrix and more stuff, actually.

I'm trying to save one heap-allocation here per node, which might not
sound like much. But the stuff I work with needs to make an exponential
number of nodes.


Boost list run by bdawes at, gregod at, cpdaniel at, john at