C++ C++;映射没有匹配的成员函数用于调用';查找';当用于字符串时
当我尝试对映射数据类型使用find函数时,我发现了以下错误,而不是我所缺少的 错误C++ C++;映射没有匹配的成员函数用于调用';查找';当用于字符串时,c++,string,algorithm,dictionary,find,C++,String,Algorithm,Dictionary,Find,当我尝试对映射数据类型使用find函数时,我发现了以下错误,而不是我所缺少的 错误 #包括 #包括 #包括 类解决方案{ 公众: bool是有效的(字符串s){ int l=s.长度(); 地图b; b[“(“]=”); b[“{”]=“}”; b[“[”]=“]”; 载体br; 如果(l%2==1) 返回false; 否则{ 对于(int i=0;i0){ 如果(br.rbegin()==s[i]){ br.向后弹出(); } 类std::map的成员函数find的参数类型是const std
#包括
#包括
#包括
类解决方案{
公众:
bool是有效的(字符串s){
int l=s.长度();
地图b;
b[“(“]=”);
b[“{”]=“}”;
b[“[”]=“]”;
载体br;
如果(l%2==1)
返回false;
否则{
对于(int i=0;i0){
如果(br.rbegin()==s[i]){
br.向后弹出();
}
类std::map
的成员函数find
的参数类型是const std::string&
。
但是,您使用的是char类型的参数,并且没有从char类型到std::string类型的隐式转换
auto it = b.find(s[i]);
因此,您需要显式地将参数转换为类型std::string
,或者提供一个可以隐式转换为类型std::string的对象
例如,在上面的调用之前,您可以声明一个字符数组,如
const char item[] = { s[i], '\0' };
然后写
auto it = b.find( item );
或者如果没有辅助字符数组,您可以直接编写
auto it = b.find( std::string ( 1, s[i]) );
在任何情况下,都不清楚为什么要使用类型std::map
而不是std::map
请注意,您的代码还有其他错误
例如在这句话中
if(br.rbegin() == s[i]){
试图将迭代器与char类型的对象进行比较
也许你指的是这种类型的向量
vector<char> br;
vector<string> br;
s[i]
是包含字符串的映射的char
find()
如果(br.rbegin()==s[i])
不去做你认为它是做的事情,或者它甚至不会编译。我投票关闭,因为一个输入错误(或多个)。与Python不同的是,'a'
和“a”
是相同的东西,单个字符('a'
)与单个字符串('a“
)不同在C++中,看起来你实际上想要的是一个<代码> map <代码>。嘿,我最初使用了一个地图,但是当我尝试使用从字符串s’中键索引的映射的find方法时,它显示了一个不同的错误,所以我改变了映射类型。谢谢最初的修复@ VladfromMoscow。
vector<char> br;
vector<string> br;
if( *br.rbegin() == s[i]){