这里是我的问题的近似代码。首先,我们有一个构造一个结构:调用struct函数的构造函数,C++
struct Pair{
Pair(int a, int b): (first (a) , second (b)) {}
int first;
int second;
};
其在地图中使用
map<string, Pair> mymap;
我想在一个函数
void f(map<string, Pair>* mymap, string c,int x, int y)
{
(*mymap)[c]=Pair(x,y);
}
但是编译器初始化这个地图首先说它找不到合适的构造函数,然后接下来的几行是没有为构造函数提供足够的参数。
我的一个朋友告诉我,我应该写这样的功能:
void f(map<string, Pair>& mymap, const string& c,int x, int y)
{
if (mymap.find(c) != mymap.end()) {
mymap[c] = Pair(x,y);
}
}
但他无法解释为何类型&应在此处使用的,而不是类型 *,和我想澄清这一点。有人可以解释吗?
@philippe我看不出有什么帮助。 – 2012-07-27 15:58:10
1.你的朋友复制了一些已经假定在那里的代码。无论如何,地图需要找到密钥才能进行插入。 2.在这种情况下,引用或指针并不重要。 3.您需要运营商[]的默认ctor来运行 4.我太害怕以此作为答案。所以可能还活着吃我。 – nurettin 2012-07-27 16:03:04
@pwned:你不应该害怕,所以我会提高答案 - 我基本上也回答了这个问题。对不起,如果你以前有过不愉快的经历,并希望能在短时间内得到一些答案:) – 2012-07-27 16:05:33