Which way to assign values to a map is most efficient? Or are they all optimized to the same code (on most modern compilers)?
// 1) Assignment using array ind
If there is no object at that key location, then:
std::map::emplace is most efficient. insert
is second (but will be extremely close). []
is least efficient.
[]
, if there is no object there, trivial constructs one. It then calls operator=
.
insert
does a copy constructor call on the std::pair
argument.
However, in the case of maps, map.insert( make_pair( std::move(key), std::move(value) ) )
is going to be close to map.emplace( std::move(key), std::move(value) )
.
If there is an object at the key location, then []
will call operator=
, while insert
/emplace
will destroy the old object and create a new one. []
could easily be cheaper in this case.
In the end, it depends on what your operator=
vs copy-construct vs trivial-construct vs destructor costs are for your key and value.
The actual work looking things up within the tree structure of the std::map
will be so close to identical it isn't funny.