2009-08-31 9 views
0

J'ai une carte commeComment passer une carte 2D en tant que paramètre à une fonction en C++?

std::map< int, int> random[50]; 

Comment puis-je passer cette carte en tant que paramètre à une fonction dire Perform()?

Merci d'avance.

+0

Est-ce que perform() est une fonction existante ou vous allez en écrire une? – Naveen

+2

Ce n'est pas une carte, c'est un tableau de 50 cartes. Est-ce vraiment ce que vous voulez dire par «carte 2D»? –

Répondre

3
void Perform(std::map< int, int > r[], size_t numElements); 

ou

void Perform(std::map< int, int >* r, size_t numElements); 

Puis, de toute façon, appelez

Perform(random, 50); 

Edit: cela peut aussi être appelé comme suit pour toute taille de tableau const.

Perform(random, sizeof(random)/sizeof (random[0])); 
+0

Merci! ça a fonctionné parfaitement! – aneesh

2

En supposant que Perform() a une certaine façon de connaître la taille du hasard, vous pouvez passer un pointeur au hasard ... par exemple:

Perform (& aléatoire);

Alternativement, vous pouvez utiliser un std :: liste des std :: cartes, et passer un pointeur (ou même une copie) de cette liste pour effectuer():

Perform (aléatoire); ou Effectuer (& aléatoire);

en fonction de la façon dont Perform est déclaré, bien sûr.

+1

Vous pouvez également passer une référence à cette liste std :: std :: map. – jgottula

+0

Ah oui, c'est ce que j'allais faire avec le Perform (& random) –

+2

& random est un pointeur, pas de référence. –

1

Selon que vous pouvez faire Perform une fonction de modèle ou non, vous pouvez choisir de

  • passer la carte par référence (const): void Perform(const std::map<int,int> (& map)[50])
  • passer un pointeur et une taille (la voie C)
  • créer un modèle qui déduit automatiquement la taille de la matrice

Ceci est un fragment de code les illustrant tous les trois.

#include <map> 

// number 50 hard coded: bad practice! 
void Perform(const std::map<int,int> (& maps) [50] ) {} 

// C-style array passing: pointer and size 
void Perform(const std::map<int,int>* p_maps, size_t numberofmaps){} 

// 'modern' C++: deduce the map size from the argument. 
template<size_t N> 
void TPerform(const std::map<int,int> (& maps)[N]) {} 



int main() { 
    std::map<int,int> m [ 50 ]; 
    Perform(m); 
    Perform(m, 50); 
    TPerform(m); 
} 
+0

J'ai omis la version où le tableau est passé par valeur, en supposant que cela coûterait des performances inutiles. – xtofl

+0

On dirait que vous avez inclus cela comme la deuxième option "C-style tableau passant". Je ne sais pas d'une autre façon de réellement le copier en passant. :) –

+0

Je voulais dire passer la valeur réelle, comme 'Perform (map arg [50])'. Bien que cela puisse être traduit comme un passage de pointeur, en effet. – xtofl

Questions connexes