std::mapの落とし穴

注意: この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。

これは、paizaオンラインハッカソンVol.8 恋するハッカソン〜君色に染まるアイドル〜のとある問題でstd::mapを使った時に気付いたことなのだが、これは使い方に注意が必要なものである。ここではその注意点をコードを交えながら気をつけたいことを書き記してみたい。

std::mapは、新たに作った時は基本的にキーと値のペアーが全くない状態で作成されるが、値のないキーを参照した時に、自動的にペアーが追加されるという挙動を見せる。例えば以下のようなコードがある。

この場合、実行すると以下のようになる。

上記の場合、std::mapオブジェクトを作成した直後は空っぽ。その後、0をキーとして参照した段階キー0のペアーが作成されて、そのオブジェクトのsizeが1になったことになる。また、0をキーとした時の値は0となっていることが確認できる。他の型の場合もまた変わった値が指定される可能性が非常に高い。

これに気付かないと、今回のPOHのあるお題をC++かつstd::mapを使った場合、ハマってしまう。

今回は幾つか代替処理を行ったため対処できたが、この部分が是非とも気をつけたいところである。

ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。ご用の方はコメントかコンタクトフォームにて。

スポンサーリンク

フォローする