2017-05-05 1 views
-4

unordered_mapの意味は、注文することなくキーごとに単価を格納することです。しかし、挿入順が保持されないことが予想されますか?std :: unordred_mapは挿入順序を保持していませんか?

私はコンパイルして実行すると:

std::unordered_map<std::string,int> temp; 
temp["Start"] = 0; 
temp["Read"] = 0; 
for (auto iter : temp) 
{ 
    std::cout << iter.first.c_str(); 
} 

VS2015で、それは、AndroidのためのGCC 4.9で

Start 
Read 

を出力し、それを出力します

Read 
Start 

それはバグです、または期待される?

+6

「順序付けられていない」部分は不明ですか? – CoryKramer

+0

ハッシング........ – LogicStuff

+0

@CoryKramer:私は順序を変更しないように "順不同"を期待していました。しかし、私は間違っていた.... – jpo38

答えて

1

これは期待されています。標準では、std::unordered_mapの要素の順序に関する保証はありません。 hereから

2

内部、unordered_mapの要素は、そのキーまたはマップされた値のいずれかに関して、任意の特定の順序でソートするが、高速を可能にするために、そのハッシュ値に応じてバケットに編成されていません個々の要素へのアクセスは、そのキー値(平均的な平均時間複雑度は平均して)によって直接的に行われます。

それはかなり要約していると思います。

関連する問題