C++ 如何将2D map作为参数传递给c++;?

C++ 如何将2D map作为参数传递给c++;?,c++,function,stdmap,C++,Function,Stdmap,我有一张像这样的地图 std::map< int, int> random[50]; std::maprandom[50]; 如何将此映射作为参数传递给函数say Perform() 提前感谢。假设Perform()有某种方式知道random的大小,您可以传递一个指向random的指针。。。例如: 执行(&随机) 或者,您可以使用std::maps的std::列表,并传递该列表的指针(甚至副本)以执行() 执行(随机);或执行(&随机) 当然,这取决于Perform的声明方式。假

我有一张像这样的地图

std::map< int, int> random[50];
std::maprandom[50];
如何将此映射作为参数传递给函数say Perform()

提前感谢。

假设Perform()有某种方式知道random的大小,您可以传递一个指向random的指针。。。例如:

执行(&随机)

或者,您可以使用std::maps的std::列表,并传递该列表的指针(甚至副本)以执行()

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

当然,这取决于Perform的声明方式。

假设Perform()有某种方式知道random的大小,您可以传递一个指向random的指针。。。例如:

void Perform( std::map< int, int > r[], size_t numElements );
执行(&随机)

或者,您可以使用std::maps的std::列表,并传递该列表的指针(甚至副本)以执行()

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

当然,这取决于Perform的声明方式

void Perform( std::map< int, int > r[], size_t numElements );
编辑:对于任何常量数组大小,也可以按如下方式调用它

Perform( random, sizeof( random ) / sizeof ( random[0] ) );
编辑:对于任何常量数组大小,也可以按如下方式调用它

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

根据是否可以使
执行
模板功能,您可以选择

  • 通过(const)引用传递映射:
    void Perform(const std::map(&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 );
}
#包括
//50号硬编码:糟糕的做法!
void Perform(const std::map(&map)[50]){
//C样式数组传递:指针和大小
void Perform(const std::map*p_-maps,size_-t numberofmaps){}
//“modern”C++:从参数推断贴图大小。
模板
void TPerform(const std::map(&map)[N]){
int main(){
std::map m[50];
执行(m);
表演(米,50);
TPerform(m);
}

根据是否可以使
执行
模板功能,您可以选择

  • 通过(const)引用传递映射:
    void Perform(const std::map(&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 );
}
#包括
//50号硬编码:糟糕的做法!
void Perform(const std::map(&map)[50]){
//C样式数组传递:指针和大小
void Perform(const std::map*p_-maps,size_-t numberofmaps){}
//“modern”C++:从参数推断贴图大小。
模板
void TPerform(const std::map(&map)[N]){
int main(){
std::map m[50];
执行(m);
表演(米,50);
TPerform(m);
}

您还可以传递对std::map的std::列表的引用。啊,是的,这就是我使用Perform(&random)Correct的目的-我的错!我想这意味着该睡觉了。很好,如果我造成任何混乱,我很抱歉!您还可以传递对std::map的std::列表的引用。啊,是的,这就是我使用Perform(&random)Correct的目的-我的错!我想这意味着该睡觉了。很好,如果我造成任何混乱,我很抱歉!perform()是一个现有的函数还是您将要编写一个函数?这不是一个映射,而是一个由50个映射组成的数组。这就是你所说的“2D映射”的确切含义吗?perform()是一个现有函数还是你将要编写一个函数?这不是映射,而是一个由50个映射组成的数组。这就是您所说的“2D映射”的确切含义吗?我省略了按值传入数组的版本,假设这会消耗不必要的性能。看起来您将其作为第二个选项“c样式数组传递”包括在内。我不知道还有什么方法可以在经过时真正复制它。:)我指的是真正的值传递,比如
Perform(map arg[50])
。虽然这可能会被翻译为指针传递,但事实上。我省略了按值传递数组的版本,假设这会消耗不必要的性能。看起来您将其作为第二个选项“c样式数组传递”包括在内。我不知道还有什么方法可以在经过时真正复制它。:)我指的是真正的值传递,比如
Perform(map arg[50])
。虽然这可能被翻译为指针传递,事实上。