我正在尝试使用std :: map并使用std :: map将其映射到std :: string。它的工作方式是给出一个由char和字符串组成的对,将它映射到特定的字符串。
到目前为止,此设置工作正常(编译器接受它):
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)
这是在四行代码中的每一行的左括号下相关的错误(出现红色波浪形)
有人可以帮我理解我做错了吗?答案 0 :(得分: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 :(得分:1)
[]
的{{1}}运算符只接受一个参数,而您提供了两个参数。由于您要使用std::map
类型的对象,因此您应该使用std::pair
和std::pair
制作char
对象。你可以把它们放在std::string
:
{}
每次尝试访问元素时,您还可以提供对象定义:
mymap[{'a', "Q1"}] = "Q4";
mymap[{'b', "Q2"}] = "Q3";
mymap[{'c', "Q3"}] = "Q2";
mymap[{'d', "Q4"}] = "Q1";
但在我看来,第一个选择是更好,更少错误。