我有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);
但是我应该如何定义函数内部的变量类型才能更改地图的值?
答案 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)
{
//...
}