我在下面的程序中使用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]]
)?
答案 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"