Re: Fastest way to clone a hash_map
In article
<beb9809a-53ab-49e7-b1b2-5867b39de49b@e39g2000hsf.googlegroups.com>,
devdude <rottyguy70@yahoo.com> wrote:
Hi,
I have the need to take a snapshot of a hash_map during execution
(actually transform it to a vector). This map is a shared resource
and therefore must be locked prior to any read/write operations thus I
need to minimize the amount of time the map resource is locked.
The map is defined as type <string, boost::shared_ptr<myobject>>. My
algorithm is as such:
void SnapShotToVector( vector< pair< string,
boost::shared_ptr<myobject> >& vec )
{
lockResource(this->map);
vec.resize( map.size() );
copy(this->map.begin(), this->map.end(),list.begin());
unlockResource(this->map);
}
I will not consider mult-threas but the code above may
not be the best to accomplish the results.
vec.clear();
vec.reserve(map.size());
copy(map.begin(),map.end(),back_inserter(vec));
is likely to be faster,
further has_map::value_type most likely is a pair<
const string,shared_ptr<myobject> > not pair<
string,shared_ptr<myobject> > so storing hash_map::value_type
in vec is likely to avoid converting const string to string.
thats 3M default ctors of hash_map::value_type not called and
3M conversions of pair<U1,U2> to pair<T1,T2> not performed.
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]