質問: S; } } cout << ans << endl; return 0; } ``` 連想配列についての理解が乏しいので、コード全体について 解説いただけると幸いです。 よろしくお願いいたします。 ### 補足情報(言語/FW/ツール等のバージョンなど) 該当する競技プログラミングの問題 https://beta.atcoder.jp/contests/abc008/tasks/abc008_2
回答: こんにちは。 `mS]`は、[std::mapのoperator[]が呼ばれます。これは、キー(first)Sに対応する値(second)への参照を返却します。 従って、「連想配列のintに対して加算している」ことになります。 また、std::mapのoperator]は該当のキーが無い時「対応する要素が存在しない場合は生成して返」します。この時の初期化は[N3337(C++11のドラフト)の`23.4.4.3 map element access`によると、T()です。これは値初期化ですから、基本型(int型等)の場合、ゼロで初期化されることになります。 残りは一般的な「最大値となるインデックス」を求める処理ですので省略しますね。