我想在Ubuntu 18.04中的C ++中使用哈希映射。但是这个错误使我感到困惑。
我想在Ubuntu 18.04中的C ++中使用哈希映射。但是这个错误使我感到困惑。
完整的错误代码为“哈希图错误:无匹配功能” 调用“ std :: map”, int> :: find(__ gnu_cxx :: __ alloc_traits
:: value_type&)“
#include <iostream>
#include <map> using namespace std;
int main() {
string s = "dfsfsdfsf";
int i = 0, j = 0, ans = 0, leng;
map<string,int> window;
leng = s.length();
for(;j < leng; j++){
if(window.find(s.at(j)) != window.end()){
i = max(i, window[s.at(j)])
}
}
return 0; }
我不知道发生了什么。请有人帮助我。 ^〜^
答案 0 :(得分:0)
std::string::at
返回对char
(单个字符)的引用。同时,std::map::find
期望引用密钥类型std::string
。没有从单个字符到字符串的隐式转换。因此,您不要给find
期望的参数。
可能的解决方法是使用std::basic_string::substr
而不是at
。该成员函数按值返回一个包含子字符串的字符串。您给它一个位置以及要读取的字符数。因此,对您代码的立即修复可以是:
window.find(s.substr(j,1)) != window.end()
除此之外,请注意std::map
是订购的地图。因此,通常通过使用自平衡二叉树来实现。如果您不需要订单,并且确实希望像哈希一样提供摊销的固定查找时间,则需要std::unordered_map
。