如何使用 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
的对象,因此您应该使用 char
和 std::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";
但我认为第一个选项更好,更不容易出错。
我正在尝试获取 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
的对象,因此您应该使用 char
和 std::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";
但我认为第一个选项更好,更不容易出错。