-1

重複の可能性:
stack <conststring>がg++でコンパイルされないのはなぜですか?

それは許可されていないことを私たちは知ってvector<const int>います。

しかし、、、map<const int, int>またはmap<int, const int>許可map<const int, const int>されていますか?

なぜだめですか)?

4

2 に答える 2

4

ベクター内のアイテムは、コピー構築可能または (C++11 以降) 移動構築可能でなければなりません。

マップのキーは破壊可能である必要があるだけで、コピー/移動構築可能ではないため、この点での要件ははるかに緩いです。

その理由は非常に単純です。ベクターのサイズが変更された場合、既存のバッファーのデータを新しいバッファーにコピーまたは移動する必要があります。対照的に、マップは通常、そのコンテンツをツリー内のノードとして格納します。ノードが作成されると、破棄されるまで単に存在します。ツリーは時々バランスを取る必要がありますが、ノード間のポインタを操作するだけで済みます。ノードのキーは、ノードが作成された後に変更されることはありません。

于 2012-12-07T18:11:36.367 に答える
0

STLコンテナに保存されているアイテムのコピーを挿入できる必要があるため、許可されていません。

const_iteratorconst参照を使用して、クラスメソッド(getter)からの読み取り専用アクセス用にコンテナーをエクスポートすることもできます。

于 2012-12-07T18:04:41.513 に答える