このコードは正常に機能しているようで、デフォルト値はvalue_type
(int
)です。すべての場合に有効ですか?std :: map <string,int>デフォルトの初期化値
std::map<std::string,int> w;
for (const auto& t: str)
w[t]++;
ダブルについてはどうですか? 地図ですか?デフォルト0.0?
このコードは正常に機能しているようで、デフォルト値はvalue_type
(int
)です。すべての場合に有効ですか?std :: map <string,int>デフォルトの初期化値
std::map<std::string,int> w;
for (const auto& t: str)
w[t]++;
ダブルについてはどうですか? 地図ですか?デフォルト0.0?
はい、このコードは、double
を含むどのタイプのキーでも機能します。これが動作する理由は、非const operator []
が参照をその値のコピーではなくキーの値に戻すためです。 ++
演算子が適用される参照です。次のように作品を示し
コードフラグメント:str
容器内型string
の各キーt
について
w
はエントリのでint&
がゼロに初期化する。この場合において)新たに作成されたオブジェクトへの参照は、++
オペレータが1.0
に1
から0
(又は0.0
を変更[]
から返された基準に印加され、発信者はい。マップ上で[]
オペレータを使用し、目的のキーを持つ要素が存在しない場合は、新しい要素が挿入され、値が初期化されます。整数の場合、これはゼロに初期化されることを意味します。
すべてのケースで機能しますか。
すべての場合、新しいキーには、T()
に初期化された値が関連付けられます。
T
がゼロに評価ようint
又はdouble
として内蔵またはPlain Old Dataタイプ、です。
T
がクラスの場合、マップは空のコンストラクタを呼び出そうとします。
このクラスにデフォルトコンストラクタがある場合。それ以外の場合は、コンパイルに失敗します。 – andrjas
実際に何を求めているのか分かりません。あなたは言い換えることができますか? –
混乱して申し訳ありません。以下の回答はとても役に立ちます。 – wenfeng