我正在尝试使用int
为拉丁字母表中的每个字母指定std::map
类型值。当我想创建新的int并给它一个等于映射到word的int
的值时,我得到一个错误:
F:\ Programming \ korki \ BRUDNOPIS \ main.cpp | 14 | error:来自' char'的用户定义转换无效to' const key_type& {aka const std :: basic_string&}' [-fpermissive] |
示例:
#include <iostream>
#include <string>
#include <cstdlib>
#include <map>
using namespace std;
int main()
{
std::map <std::string,int> map;
map["A"] = 1;
int x;
std:: string word = "AAAAAA";
x = map[word[3]];
cout << x;
return 0;
}
我做错了什么?
答案 0 :(得分:1)
我正在尝试使用std :: map为拉丁字母表中的每个字母分配int类型值。
因此,您必须使用char
(而不是std::string
)作为地图的关键字;
#include <iostream>
#include <string>
#include <map>
int main()
{
std::map<char, int> map;
map['A'] = 1;
int x;
std:: string word = "AAAAAA";
x = map[word[3]];
std::cout << x << std::endl;
return 0;
}
正如其他人所观察到的那样,现在您尝试使用char
作为密钥为std::map
的{{1}}的密钥。并且没有从std::string
到char
的自动转换。
Little Off主题建议:避免为变量指定类型名称,例如您命名为std::string
的{{1}}。这是合法但容易混淆。
答案 1 :(得分:0)
word[3]
的类型为char
,您的地图的密钥类型为std::string
。没有从char
转换为std::string
。
只需更改字符串的子字符串(使用string::substr
):
x = map[word[3]];
到此:
x = map[word.substr(3, 1)];
或者更好的是,使用char
作为您的密钥,因为您需要字母,如下所示:
std::map <char, int> map;
map['A'] = 1;
// rest of the code as in your question
答案 2 :(得分:0)
word[3]
是字符串第四个位置的字符。但是你不能将它用作地图的键,因为地图使用字符串作为键。如果您将地图更改为具有char键,那么它将起作用,或者您可以: