std::map<std::string, int> m; で、キー存在しない
std::map の operator[] は、指定したキーが存在しない場合に、そのキーと値初期化された値(intなら0)を持つ要素を新たに挿入し、その値への参照を返します。このため、単に存在確認のつもりで m[key] を使うと、意図せず要素が増えてしまいます。挿入せずに検索したいときは find() や count()、C++20以降なら contains() を使います。また、例外を投げるアクセスが必要な場合は at() を使うと、キーが無いときに std::out_of_range が送出されます。