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

How to Map a string and char pair to a string using a std::map?

我正在尝试获取 std::pair 并使用 std::map 将其映射到 std::string。它的工作方式是给定一对由一个字符和一个字符串组成的,将其映射到一个特定的字符串。

这个设置到目前为止工作得很好(编译器接受它):

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)

这是四行代码中每一行左括号下的错误(出现红色波浪线的地方)

有人可以帮助我了解我做错了什么吗?

地图上的 [] 运算符不接受两个项目。只需要一个。在您的情况下,它需要一个 std::pair 对象。所以这样的事情会起作用:

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

你可能想为你的对做一个 typedef class:

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

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";

但我认为第一个选项更好,更不容易出错。