2017-10-16 6 views
0

Dans un programme que je suis codage je dois utiliser une structure comme celle-ci:Tableau dynamique des cartes en C++

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

Le problème est que je dois générer la taille de la carte dynamique, donc Je définirais:

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

Mais j'ai des problèmes pour l'allouer. Toute suggestion?

Merci

+3

Qu'est-ce qui ne va pas avec ['std :: vector'] (http://fr.cppreference.com/w/cpp/container/vector)? –

+1

En ce qui concerne votre problème actuel avec les pointeurs, s'il vous plaît [lire sur la façon de poser de bonnes questions] (http://stackoverflow.com/help/how-to-ask) et apprendre comment créer un [Exemple minimal, complet et vérifiable ] (http://stackoverflow.com/help/mcve). –

Répondre

0

Vous ne devez allouer l'espace de N * sizeof(std::unordered_map<size_t, int> *).

2

Je vous recommande d'utiliser std::vector pour gérer vos baies. Vous pouvez créer un vecteur de vecteurs comme ceci:

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); 
    } 
} 

Si vous connaissez les tailles au moment de la compilation, vous pouvez utiliser std::array qui devrait être plus rapide.

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

Juste un ajout mineur à cette réponse - dans le cas où vous connaissez la taille de vos tableaux au moment de la compilation - je suggère d'utiliser std :: array au lieu de vector. De cette façon, le compilateur peut faire de meilleures optimisations à votre code – Chaosit

+0

Dans ce cas, je connais la taille à l'exécution. En utilisant l'approche vectorielle, j'ai trouvé une solution. 'statique std :: vecteur >> carte;' 'map.resize (num_of_col, std :: vecteur > (num_of_row));' – Jowi

+0

@Chaosit Ajouté un commentaire. – Galik