2017-04-19 54 views
2
map<int, int> mp; 

我能理解下面的代碼:C++地圖做加不加初始化

mp[1] = 1; 
mp[2] = 2; 

但如何做到這一點有意義嗎?

mp[3]++; 

沒有設置mp[3] = n;(n可能是一個整數)。

+1

看看[這個答案](http://stackoverflow.com/a/12889600/391161)。 – merlin2011

+2

可能的[STL映射是否自動初始化值的重複?](http://stackoverflow.com/questions/12889496/does-stl-map-auto-initialize-values) – merlin2011

+0

您還可以在下面查看我的解決方案解釋全球範圍的例子。 –

回答

7

mapoperator[]引用一個還不存在的元素時,它通過值 - 初始化該條目來添加該元素。對於int,值初始化意味着初始化爲零。所以mp[3]++,如果該鍵3不存在,結束了相關的值設置爲1

+0

http://en.cppreference.com/w/cpp/container/map/operator_at - >「如果鍵不存在,則插入value_type(key,T())」 – Anonymous

0

請參閱通過SGI: MAP

的MP管理的文檔[3] ++會自動調用MP [3 ],如果你看到文檔,你可以看到mp [X]等於(*((m.insert(value_type(k,data_type()))。)first。)。second。這意味着data_type()正在調用int()。

簡而言之,int()將被稱爲初始值。和int()是0;請參考下面的代碼。

#include <iostream> 
using namespace std; 

int 
main(int,char**) 
{ 
    cout << int() << endl; 
    return 0; 
} 

PS。我找到了正確的答案並轉發了它。感謝HisBlog