2010-12-30 5 views
1

はmap :: iteratorの出力順ですが、マップのキー/値を変更しないと保証されますか?mapキー/値が変更されないと、std :: map iteratorの出力順序は一定になりますか?

例:いくつかのキー/値を使用してマップを初期化し、一連のループを実行し、各ループでマップを繰り返して読み取り専用のアクションを実行すると、各繰り返しの出力は等しくなりますか?

for(i=0;i<5;i++) 
for(it=map.begin(); it!=map.end(); it++) 
    // read some value from map 

答えて

11

std::mapは、オーダーされたコレクションです。 begin()からend()への繰り返しは常にマップエントリを順番に返します。

この順序は、地図の比較演算子(デフォルトではstd::less<Key>)によって決まります。

単語:はい。

0

ためのみ(挿入、消去、クリア)変更操作で変更され、他の操作をソートする注文

0

std::map保証には影響しません。内容が変更されない場合、マップソートは行われません。

私は、これが起こらないシナリオしか考えられません。マップキーはポインターであり、比較ファンクターの逆参照オブジェクトは比較演算を実行するためにキーで指されています。キーは変更されませんが、値は(他の理由で)doによって指されます。そして、そこにさえ、標準が要素を挿入するときにのみ比較を評価するためにstd::mapの実装を強制するかどうかはわかりません。

+2

これは違法な比較関係になります。これは、比較が異なる時に異なる回答をもたらす可能性がある場合、比較がキーに対して厳密な弱い順序をもたらさないためです。 –

+0

@Charles Bailey:それを知ってよかったです。どうもありがとう! –

関連する問題