2017-04-19 56 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