Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c++ > #7789
| Path | csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!gegeweb.org!de-l.enfer-du-nord.net!feeder2.enfer-du-nord.net!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail |
|---|---|
| From | Ian Collins <ian-news@hotmail.com> |
| Newsgroups | comp.lang.c++ |
| Subject | Re: STL map insert Options |
| Date | Thu, 14 Jul 2011 16:50:47 +1200 |
| Lines | 52 |
| Message-ID | <987av2F78bU2@mid.individual.net> (permalink) |
| References | <MPG.287d2c69abea9b739896c0@news.eternal-september.org> <526778d1-e768-4ee3-b42e-f8cc9444fab9@t8g2000prm.googlegroups.com> <983r38FglrU1@mid.individual.net> <a0b73b83-e7ac-431f-8778-ffcf1dd22c0e@h38g2000pro.googlegroups.com> <986bn2FglrU4@mid.individual.net> <4e1e6bae$0$3476$c3e8da3$12bcf670@news.astraweb.com> |
| Mime-Version | 1.0 |
| Content-Type | text/plain; charset=ISO-8859-1; format=flowed |
| Content-Transfer-Encoding | 7bit |
| X-Trace | individual.net y2wtB9CwGKnUK1Zuxi3bBQdrSVLNEAETDVSrzYo4m3GDhCti8n |
| Cancel-Lock | sha1:qzzZDd2ARg5QCCxGvMfXhWveNmQ= |
| User-Agent | Mozilla/5.0 (X11; U; SunOS i86pc; en-US; rv:1.9.2.9) Gecko/20101021 Lightning/1.0b2 Thunderbird/3.1.4 |
| In-Reply-To | <4e1e6bae$0$3476$c3e8da3$12bcf670@news.astraweb.com> |
| Xref | x330-a1.tempe.blueboxinc.net comp.lang.c++:7789 |
Show key headers only | View raw
On 07/14/11 04:07 PM, Pavel wrote:
> Ian Collins wrote:
>> On 07/14/11 02:31 AM, Stephen Howe wrote:
>>>> I'd be very surprised if all three didn't compile down to the same
>>>> assembly code. It certainly does with the two compilers I tried.
>>>>
>>>> Ian Collins
>>>
>>> I have just rechecked with Visual Studio 2008, 8 years later and I get
>>> the same results.
>>> And that is with full optimisations switched on.
>>> It is easy to see why as make_pair()/pair() are creating an actual
>>> object to insert, value_type does not. So that is an extra round of
>>> copy constructors/destructors.
>>> You might be using ints and the compilers you use might optimise out
>>> extra assignments.
>>>
>>> With the code referenced in the link, I get (and it is not too hard to
>>> work out what work map actually does).
>>
>> If you change the code to use the same type as the map::value_type, all things
>> are equal. For example:
>>
>> m.insert(pair<const Key, Value>(t2, tv));
> const is the key here; otherwise there will be the second copy; same with make_pair.
>
> e.g. reasonably looking
>
>
> std::map<int, int> m;
> m.insert(std::make_pair(1,2));
>
> will lead to 2 copies: first std::pair<int, int>(), then std::pair<const int,
> int>(std::pair<int, int>);
>
> That's why for performance reasons, value_type or a typedef is a better option.
> For same reason make_pair is one of the "evil" functions that I never use: it's
> too easy to introduce an accidental extra copy.
Indeed. A little helper like
template <typename Key, typename Value>
std::pair<const Key,Value> map_pair( const Key& key, Value& value )
{
return std::pair<const Key,Value>(key, value);
}
can come in handy.
--
Ian Collins
Back to comp.lang.c++ | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
STL map insert Options mrc2323@cox.net (Mike Copeland) - 2011-07-05 14:13 -0700
Re: STL map insert Options Ian Collins <ian-news@hotmail.com> - 2011-07-06 10:28 +1200
Re: STL map insert Options Paavo Helde <myfirstname@osa.pri.ee> - 2011-07-06 01:14 -0500
Re: STL map insert Options Stephen Howe <stephen.howe@kantarmedia.com> - 2011-07-12 13:29 -0700
Re: STL map insert Options Ian Collins <ian-news@hotmail.com> - 2011-07-13 09:01 +1200
Re: STL map insert Options Stephen Howe <stephen.howe@kantarmedia.com> - 2011-07-13 07:31 -0700
Re: STL map insert Options Leigh Johnston <leigh@i42.co.uk> - 2011-07-13 15:59 +0100
Re: STL map insert Options Ian Collins <ian-news@hotmail.com> - 2011-07-14 07:57 +1200
Re: STL map insert Options Pavel <pauldontspamtolk@removeyourself.dontspam.yahoo> - 2011-07-14 00:07 -0400
Re: STL map insert Options Ian Collins <ian-news@hotmail.com> - 2011-07-14 16:50 +1200
Re: STL map insert Options Jorgen Grahn <grahn+nntp@snipabacken.se> - 2011-07-19 15:20 +0000
csiph-web