在C ++中初始化静态二维映射<int,int>

Dav*_*vid 5 c++ containers stl multidimensional-array

我有二维图

map <int, map<int, int>> _map;
Run Code Online (Sandbox Code Playgroud)

第一种初始化效果很好:

int i = 1,  j = 2,  k = 3;
map <int, map<int, int>> _map;
_map[i][j] = 100;
_map[i][k] = 200;
std::cout << _map[i][j] << ":" << _map[i][k] << std::endl; 
Run Code Online (Sandbox Code Playgroud)

因此它打印:

100:200
Run Code Online (Sandbox Code Playgroud)

但是,第二次初始化失败:

map <int, map<int, int>> _map = {
    {1, {{2, 100}}},
    {1, {{3, 200}}}
  };
  std::cout << _map[i][j] << ":" << _map[i][k] << std::endl;
Run Code Online (Sandbox Code Playgroud)

第二张照片:

100:0
Run Code Online (Sandbox Code Playgroud)

我知道map具有“唯一键”,另一方面,我们可以像“ _map [i] [j]”一样进行初始化。

您能否解释一下如何以正确的方式初始化静态二维图

Jar*_*d42 5

这将是:

map<int, map<int, int>> _map = {
    {1, {{2, 100}, {3, 200}}}
  };
Run Code Online (Sandbox Code Playgroud)

您还可以:

_map[1] = {{2, 100}, {3, 200}};
Run Code Online (Sandbox Code Playgroud)

你的片段

map <int, map<int, int>> _map = {
    {1, {{2, 100}}},
    {1, {{3, 200}}}
  };
Run Code Online (Sandbox Code Playgroud)

将“相当于”(初始化与插入):

_map.insert({1, {{2, 100}}});
_map.insert({1, {{3, 200}}}); // Fails as key 1 already present.
Run Code Online (Sandbox Code Playgroud)