【问题标题】:How to Map a string and char pair to a string using a std::map?如何使用 std::map 将字符串和字符对映射到字符串?
【发布时间】:2017-03-29 04:37:06
【问题描述】:

我正在尝试获取 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)

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

谁能帮我理解我做错了什么?

【问题讨论】:

  • 像 mymap[{'a', "Q1"}] = "Q4"; 那样做

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


【解决方案1】:

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

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

你可能想为你的 pair 类创建一个 typedef:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多