2017-10-16 49 views
0

在其中我编码我需要使用一个结构,因为这一个程序的动态数组:地图在C++

static std::unordered_map<size_t, int> map[N][M]; 

的问题是,我需要动态生成地图的大小,所以我会定义:

static std::unordered_map<size_t, int> **map 

但我在分配它时出现问题。任何建议?

感谢

+3

['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)有什么问题? –

+1

至于你目前的问题与指针,请[阅读关于如何问好问题](http://stackoverflow.com/help/how-to-ask),并学习如何创建一个[最小,完整和可验证的例子](http://stackoverflow.com/help/mcve)。 –

回答

0

你只需要分配的N * sizeof(std::unordered_map<size_t, int> *)的空间。

2

我推荐你用std::vector来管理你的阵列。您可以创建载体这样的向量:

std::vector<std::vector<std::unordered_map<size_t, int>>> map(M, std::vector<std::unordered_map<size_t, int>>(N)); 

for(int m = 0; m < M; ++m) 
{ 
    for(int n = 0; n < N; ++n) 
    { 
     map[m][n].emplace(0, 1); 
    } 
} 

如果你知道在编译时的大小,你可以使用std::array这应该会更快。

static std::array<std::array<std::unordered_map<size_t, int>, M>, N> map; 
+0

只是对这个答案的一个小增加 - 如果你知道在编译时数组的大小 - 我会建议使用std :: array而不是vector。这样编译器可以更好地优化代码 – Chaosit

+0

在这种情况下,我知道运行时的大小。使用矢量方法,我找到了一个解决方案。 'static std :: vector >> map;'map.resize(num_of_col,std :: vector >(num_of_row));' – Jowi

+0

@Chaosit Added一条评论。 – Galik