如何将2D地图作为指向函数的指针传递

时间:2011-01-15 19:59:12

标签: c++ pointers map

我有2张地图:

map<int, map<int, int> > m1;
map<int, map<int, int> > m2;

并希望用功能填充它们:

void fillMaps (m1, m2) {
    * m1[0][0] = 5;
    * m2[0][1] = 4;
}

我应该如何将这些地图传递给该功能? 我想变量本身可以像这样传递:

map<int, map<int, int> > m1;
map<int, map<int, int> > m2;

fillMaps(m1, m2);

但是我应该如何定义函数内部的变量类型才能更改地图的值?

6 个答案:

答案 0 :(得分:3)

要更改函数中的地图,您需要通过引用传递它们:

void fillMaps (map<int, map<int, int> >& m1, map<int, map<int, int> >& m2) {
    m1[0][0] = 5;
    m2[0][1] = 4;
}

请注意,在近角括号之间有空格可以防止奇怪的编译错误。另请注意,通过引用传递,您不需要使用任何指针解引用;这是自动处理的。

答案 1 :(得分:2)

您可以通过引用或指针传递地图来修改值。

void fillMapsByReference (
    std::map<int, map<int, int> >& m1,
    std::map<int, map<int, int> >& m2)     {
    m1[0][0] = 5;
    m2[0][1] = 4;
}

void fillMapsByPointer (
    std::map<int, map<int, int> >* m1,
    std::map<int, map<int, int> >* m2)     {
    *m1[0][0] = 5;
    *m2[0][1] = 4;
}

答案 2 :(得分:2)

我会从别人那里得到一些不同的答案。您可以使用C ++模板并使编译器自动为您推断类型:

template <typename T>
void fillMaps (T& m1, T& m2) {
    m1[0][0] = 5;
    m2[0][1] = 4;
}

这样称呼:

map<int, map<int, int> > m1;
map<int, map<int, int> > m2;

fillMaps(m1, m2);

这样您可以通过引用传递地图。此外,如果您稍后更改地图的类型(例如使用其他地图实现或使用字符串而不是整数),则无需更改此功能。

答案 3 :(得分:1)

使用typedef使代码更清晰:

typedef map<int, map<int, int> > intmap;

void fillMaps(intmap &m1, intmap &m2)
{
     m1[0][0] = 5;
     m2[0][1] = 4;
}

答案 4 :(得分:0)

通过引用传递值。此外,您需要在fillMaps中声明m1和m2的类型。

void fillMaps(map<int, map<int,int> > &m1, map<int, map<int,int> > &m2)
{
     // fill map code in here
     m1[0][0] = 5;
     m2[0][1] = 4;
}

然后,呼叫使用fillMaps(m1, m2);

答案 5 :(得分:0)

这是我的方法:

template <typename T>
class MapOfMaps
{
  public:
    // ...

  private:
    map<T, map<T, T> > m;
};

typedef MapOfMaps<int> MapOfIntMap;

void fillmap(MapOfIntMap& m1, MapOfIntMap& m2)
{
//...
}