C++11 の場合、以下の間にパフォーマンスの違いはまだありますか?
(std::map<Foo, std::vector<Bar> >
例として)
map[key] = myVector and map.emplace(key, myVector)
私が理解していない部分は、operator[] の正確な内部です。これまでの私の理解は(キーが存在しない場合):
- マップ内に新しいキーと関連する空のデフォルト ベクトルを作成します。
- 関連付けられた空ベクトルの参照を返します
- myVector を参照に割り当てる???
ポイント3は私が理解できなかった部分ですが、そもそも参照に新しい値をどのように割り当てることができますか?
ポイント3を整理することはできませんが、何とかコピー/移動が必要だと思います。C++11 が移動操作になることを知るのに十分スマートであると仮定すると、この "[]" 割り当て全体は、insert() よりもすでに安価ですか? emplace() とほぼ同等ですか? ---- デフォルトの構築とコンテンツの移動と、コンテンツを直接配置した構築ベクトルとは?