2017-07-22 10 views
0

私は、次のコードを実行しようとした:イテレータ(std :: map)はC++でどのように動作しますか?

std::map < std::string, std::string > m; 
m[ "one" ] = "0"; 
m[ "two" ] = "1"; 
m[ "three" ] = "2"; 
m[ "four" ] = "3"; 

auto it = m.begin(); 
std::cout << it->first << "\n"; 

出力は次のとおりです。 "4"。しかし、それはなぜ終わりから始まるのですか?私は "1つ"が期待された!

答えて

5

理由は、std::mapがソート済みのコンテナです。あなたの特定のケースでは、キーに応じて、キーと値のペアである要素を並べ替えます(std::string)。

次に、文字列は辞書順に比較されます。文字列fourがすべての文字列の中で最小のものであるため、ペア( "four"、 "3")が最初のペアになります。したがって、begin()は、このペアを指すイテレータを返します。

0

私は確信していませんが、std :: mapは高速検索のキー要素をソートしていると思います。 (私はそれがバイナリ検索を使用すると信じています)。順序を変更してstd :: vectorやstd :: listやstd :: dequeのようなものを使用するようにしたくない場合は、

関連する問題