In article
<beb9809a-53ab-49e7-b1b2-5867b39de49b@[EMAIL PROTECTED]
>,
devdude <rottyguy70@[EMAIL PROTECTED]
> 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! ]


|