对于 C++11,以下之间是否还有性能差异?
(std::map<Foo, std::vector<Bar> >
例如)
map[key] = myVector and map.emplace(key, myVector)
我没有弄清楚的部分是 operator[] 的确切内部。到目前为止,我的理解是(当密钥不存在时):
- 在地图内的适当位置创建一个新键和关联的空默认向量
- 返回关联空向量的引用
- 将 myVector 分配给参考???
第 3 点是我无法理解的部分,首先如何为引用分配新值?
尽管我无法对第 3 点进行排序,但我认为不知何故只需要复制/移动。假设 C++11 足够聪明,知道这将是一个移动操作,那么整个“[]”赋值是否已经比 insert() 便宜?它几乎等同于 emplace() 吗?---- 默认构造和移动内容,与直接在适当位置构造内容的向量?