2013-04-23 857 views
5

這段代碼看起來很好,默認值爲value_typeint)爲0;它適用於所有情況嗎?std :: map <string,int>默認初始化值

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

什麼雙? 地圖?默認0.0?

+1

我不明白你在問什麼。你能改說嗎? – 2013-04-23 19:27:14

+0

對不起,感到困惑。下面的答案是非常有幫助的。 – wenfeng 2013-04-23 20:40:14

回答

5

是的,這段代碼適用於任何類型的密鑰,包括double。原因是非const operator []返回一個參考到鍵的值,而不是該值的副本。這就是++運算符應用的引用。

的代碼片段顯示您的工作方式如下:

  • 對於在str容器string類型的每個關鍵t
  • 地圖w中搜索給定鍵
  • 由於進入不在那裏,新的插入到地圖中
  • 由於條目的鍵已知,但值不是,創建該值的默認對象
  • 的引用到新創建的對象(在這種情況下,int&初始化爲零)被返回給調用者
  • ++運算符應用於從[]返回的參考,這改變01(或0.01.0等)
+0

感謝您的解釋!很有幫助! – wenfeng 2013-04-23 20:37:18

+0

我明白了。謝謝。這實際上是我在stackoverflow上的第一個問題。 – wenfeng 2013-04-23 21:50:48

6

是的。當您在地圖上使用[] -operator並且不存在具有所需鍵的元素時,會插入一個新元素,該元素將進行值初始化。對於整數,這意味着初始化爲零。

1

它適用於所有情況嗎?

對於所有情況,新密鑰將與初始化爲T()的值相關聯。

T是內置或Plain Old Data類型,如intdouble,評估爲零。

T是一個類時,地圖將嘗試調用空的構造函數。

+0

如果這個類有一個默認的構造函數。否則它將無法編譯。 – andrjas 2013-04-23 19:35:52