如何修复C ++中的“哈希图错误:”错误

时间:2019-01-02 08:48:07

标签: c++ c++11 hashmap

我想在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; }

我不知道发生了什么。请有人帮助我。 ^〜^

1 个答案:

答案 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