2013-04-23 23 views
5

このコードは正常に機能しているようで、デフォルト値はvalue_typeint)です。すべての場合に有効ですか?std :: map <string,int>デフォルトの初期化値

std::map<std::string,int> w; 
for (const auto& t: str) 
    w[t]++; 

ダブルについてはどうですか? 地図ですか?デフォルト0.0?

+1

実際に何を求めているのか分かりません。あなたは言い換えることができますか? –

+0

混乱して申し訳ありません。以下の回答はとても役に立ちます。 – wenfeng

答えて

5

はい、このコードは、doubleを含むどのタイプのキーでも機能します。これが動作する理由は、非const operator []参照をその値のコピーではなくキーの値に戻すためです。 ++演算子が適用される参照です。次のように作品を示し

コードフラグメント:str容器内型stringの各キーtについて

  • マップwはエントリので
  • 与えられたキーが検索され存在しない場合は、新しいものがマップに挿入されます
  • エントリのキーは既知ですが、値は存在しないため、値のデフォルトオブジェクトが作成されます
  • int&がゼロに初期化する。この場合において)新たに作成されたオブジェクトへの参照は、++オペレータが1.01から0(又は0.0を変更[]から返された基準に印加され、発信者
  • に戻されます。など)
+0

説明をありがとう!非常に役立ちます! – wenfeng

+0

私は参照してください。ありがとう。これは実際にstackoverflowに関する私の最初の質問です。 – wenfeng

6

はい。マップ上で[]オペレータを使用し、目的のキーを持つ要素が存在しない場合は、新しい要素が挿入され、値が初期化されます。整数の場合、これはゼロに初期化されることを意味します。

1

すべてのケースで機能しますか。

すべての場合、新しいキーには、T()に初期化された値が関連付けられます。

Tがゼロに評価ようint又はdoubleとして内蔵またはPlain Old Dataタイプ、です。

Tがクラスの場合、マップは空のコンストラクタを呼び出そうとします。

+0

このクラスにデフォルトコンストラクタがある場合。それ以外の場合は、コンパイルに失敗します。 – andrjas

関連する問題