如何使用std :: map将字符串和字符串映射到字符串?

时间:2017-03-29 04:37:06

标签: c++ string mapping stdmap std-pair

我正在尝试使用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)

这是在四行代码中的每一行的左括号下相关的错误(出现红色波浪形)

有人可以帮我理解我做错了吗?

2 个答案:

答案 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::pairstd::pair制作char对象。你可以把它们放在std::string

{}

每次尝试访问元素时,您还可以提供对象定义:

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

但在我看来,第一个选择是更好,更少错误。