それは許可されていないことを私たちは知ってvector<const int>
います。
しかし、、、map<const int, int>
またはmap<int, const int>
許可map<const int, const int>
されていますか?
なぜだめですか)?
それは許可されていないことを私たちは知ってvector<const int>
います。
しかし、、、map<const int, int>
またはmap<int, const int>
許可map<const int, const int>
されていますか?
なぜだめですか)?
ベクター内のアイテムは、コピー構築可能または (C++11 以降) 移動構築可能でなければなりません。
マップのキーは破壊可能である必要があるだけで、コピー/移動構築可能ではないため、この点での要件ははるかに緩いです。
その理由は非常に単純です。ベクターのサイズが変更された場合、既存のバッファーのデータを新しいバッファーにコピーまたは移動する必要があります。対照的に、マップは通常、そのコンテンツをツリー内のノードとして格納します。ノードが作成されると、破棄されるまで単に存在します。ツリーは時々バランスを取る必要がありますが、ノード間のポインタを操作するだけで済みます。ノードのキーは、ノードが作成された後に変更されることはありません。
STLコンテナに保存されているアイテムのコピーを挿入できる必要があるため、許可されていません。
const_iterator
const参照を使用して、クラスメソッド(getter)からの読み取り専用アクセス用にコンテナーをエクスポートすることもできます。