2017-03-29 123 views
0

我想要一個std :: pair並使用std :: map將其映射到std :: string。它的工作方式被賦予一個由char和一個字符串組成的對,將它映射到一個特定的字符串。如何使用std :: map將字符串和字符對映射到字符串?

這種設置到目前爲止工作得很好(編譯器接受它):

std::map<std::pair<char, std::string>, std::string> mymap; 
std::map<std::pair<char, std::string>, std::string>::iterator it; 

但是,當我嘗試這樣做:

mymap['a', "Q1"] = "Q4"; 
mymap['b', "Q2"] = "Q3"; 
mymap['c', "Q3"] = "Q2"; 
mymap['d', "Q4"] = "Q1"; 

它回來的這個錯誤,我不明白:

Error 1 error C2679: binary '[' : no operator found which takes a right-hand operand of type 'const char [3]' (or there is no acceptable conversion) 

,它是(四個行代碼的左支架下相關聯的錯誤,其中一個紅平方Uiggly出現)

有人可以幫助我瞭解我做錯了什麼嗎?

+2

是否像mymap [{'a',「Q1」}] =「Q4」; – user1438832

回答

2

地圖上的[]運算符不包含兩項。它只需要一個。在你的情況下,它期待一個std :: pair對象。因此,像這樣將工作:

mymap[std::pair<char, std::string>('c', "Q1")] = "Q4"; 

你可能想使一個typedef您對類:

using myPair = std::pair<char, std::string>; 
mymap[myPair('c', "Q1")] = "Q4"; 
1

[]運營商的std::map只接受一個參數,而你提供了兩個。由於您要使用std::pair類型的對象,因此應該使用charstd::string作爲std::pair對象。您可以通過內附他們{}做到這一點:

mymap[{'a', "Q1"}] = "Q4"; 
mymap[{'b', "Q2"}] = "Q3"; 
mymap[{'c', "Q3"}] = "Q2"; 
mymap[{'d', "Q4"}] = "Q1"; 

你也可以提供一個對象定義每次嘗試喲訪問的元素:

mymap[std::pair<char, std::string>('a', "Q1")] = "Q4"; 
mymap[std::pair<char, std::string>('b', "Q2")] = "Q3"; 
mymap[std::pair<char, std::string>('c', "Q3")] = "Q2"; 
mymap[std::pair<char, std::string>('d', "Q4")] = "Q1"; 

但在我看來,第一個選項是更好,更少的錯誤。