【发布时间】:2016-08-27 02:03:16
【问题描述】:
对于C++11,以下还有性能差异吗?
(以std::map<Foo, std::vector<Bar> >为例)
map[key] = myVector and map.emplace(key, myVector)
我没有弄清楚的部分是 operator[] 的确切内部。到目前为止,我的理解是(当密钥不存在时):
- 在地图内创建一个新键和关联的空默认向量
- 返回关联空向量的引用
- 将 myVector 分配给引用???
第 3 点是我无法理解的部分,首先如何为引用分配新值?
虽然我无法对第 3 点进行排序,但我认为不知何故只需要复制/移动。假设 C++11 足够聪明,知道这将是一个移动操作,那么整个“[]”赋值是否已经比 insert() 便宜?它几乎等同于 emplace() 吗? ---- 默认构造和移动内容,与直接在原地构造内容的向量?
【问题讨论】:
-
您的问题是针对
map类型为std::map<Foo, std::vector<Bar>>还是针对任何类型的地图? -
是的,我会更新问题
标签: c++11 dictionary emplace