2009-08-31 57 views
0

我有这样如何将2D地图作为参数传递给C++中的函数?

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

地图我怎样才能通过这个地图作为参数传递给一个函数说执行()?

在此先感谢。

+0

是执行()一个现有的函数,或者你要写一个? – Naveen 2009-08-31 05:21:02

+2

这不是一张地图,而是一张50张地图。这绝对是你'2D地图'的意思吗? – 2009-08-31 08:21:27

回答

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

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

然后,无论哪种方式,呼叫

Perform(random, 50); 

编辑:这也可以用于任何常量阵列尺寸如下调用。

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

谢谢!它工作完美! – aneesh 2009-08-31 09:11:28

2

假设执行()有知道的大小随意的一些方法,你可以将指针传递到随机...例如:

执行(&随机);

或者,您可以使用std ::地图的一个std ::名单,并通过该列表的指针(甚至是复制)执行():

执行(随机);或执行(&随机);

取决于Perform如何被声明,当然。

+1

你也可以传递一个对std :: map的std :: list的引用。 – jgottula 2009-08-31 05:14:32

+0

啊是的,这就是我与执行(&随机) – 2009-08-31 05:15:20

+2

&随机是一个指针,而不是参考。 – 2009-08-31 05:22:21

1

根据您是否可以Perform模板函数或没有,你可以选择

  • 的(常量)引用传递地图:void Perform(const std::map<int,int> (& map)[50])
  • 传递一个指针和大小( C方式)
  • 创建模板,自动推导出阵列的大小

这是一个说明所有三个代码片段。

#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

我忽略了按值传递数组的版本,假设这会花费不必要的性能。 – xtofl 2009-08-31 08:09:19

+0

看起来像你包括作为第二个选项“C式阵列传球”。我不知道另一种方式来传递时实际复制它。 :) – 2009-08-31 12:38:13

+0

我的意思是真正的价值传递,像'Perform(地图 arg [50])''。尽管这可能被翻译为指针传递。 – xtofl 2009-08-31 12:48:24

相关问题