這裏是我的問題的近似代碼。首先,我們有一個構造一個結構:調用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