当我使用STL地图时,为什么会出现编译错误?

时间:2017-08-25 07:01:41

标签: c++ stl

我在下面的程序中使用A类型的变量map<string, int>string s

map<string, int> A;
A["X"] = 10;
string s = "LXX";
int ans += A[s[2]];

但是当我运行代码时,编译错误来了:

no match for 'operator[]' (operand types are 'std::map<std::__cxx11::basic_string<char>, int>' and '__gnu_cxx::__alloc_traits<std::allocator<char> >::value_type {aka char}')

s[2]这样的字符串中的字符不能是地图的索引吗?我应该如何正确使用它(A[s[2]])?

2 个答案:

答案 0 :(得分:0)

如果要将string中的字符映射到int,请尝试将map<string, int>更改为map<char, int>。如果您要将string映射到int,请尝试使用A[s]进行访问。

答案 1 :(得分:0)

如果您在字符串上使用[]运算符,那么您的char权限是否正确?

当您传递的std::string不兼容时,地图的密钥为char

您需要做的是传递有效密钥 - &gt; std::string要映射int

map<string, int> m;
std::string s("test");

m[s] = 10;

if ( m.find(s) == m.end() )
{
  // not found
} else
{
  // found
}

如果您要映射std::string的字符,则必须将地图声明更改为std::map<char, int>或传递包含2个字符的字符串。 (一个是空终止字符)

A[std::string(s[i])]   ---> 'c' to "c\0"