2017-08-25 61 views
-2

我使用一个变量map<string, int>A,在我的程序string s如下:我为什么会有编译错误,当我使用STL的地图?

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}')

在一个char像s[2]字符串不能是一个地图的索引?我应该如何正确使用它(A[s[2]])?

+2

如果您希望我们与您问题的帮助,那你首先应该创建一个[最小,完整,可验证的示例](http://stackoverflow.com/help/mcve)表现出这个问题。然后编辑您的问题以包含该示例(对引起错误的行进行注释)以及编译器的* complete *输出,包括可能的信息说明。另请[请阅读如何提出好问题](http://stackoverflow.com/help/how-to-ask)。 –

+1

缺少从你的程序一些背景...但我相信你得到的字符串映射的INT,对不对?所以只需A [s]应该得到你的int。 – BeerBaron

+1

's [i]'是一个'char',而不是'std :: string',所以你有一个类型不匹配。 – hnefatl

回答

0

如果您在字符串中使用[]运营商,您购买的char吧?

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

你需要做的是通过一个有效的密钥 - >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" 
0

如果要将字符从string映射到int,请尝试将map<string, int>更改为map<char, int>。如果你映射到stringint,尝试用A[s]访问。

相关问题