Как исправить ошибку «Hashmap:» в C ++ - PullRequest
0 голосов
/ 02 января 2019

Я хочу использовать hashmap в C ++ в Ubuntu 18.04. Но эта ошибка меня сбивает с толку.

Я хочу использовать hashmap в C ++ в Ubuntu 18.04. Но эта ошибка меня запутывает.

Полный код ошибки: «Ошибка Hashmap: нет подходящей функции для позвоните в ‘std :: map, Int> :: находка (__ 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 голосов
/ 02 января 2019

std::string::at возвращает ссылку на char, один символ. Между тем std::map::find ожидал ссылку на тип ключа, a std::string. Не существует неявного преобразования из одного символа в строку. Таким образом, вы не даете find аргумент, который он ожидал.

Возможный обходной путь - использовать std::basic_string::substr вместо at. Эта функция-член возвращает строку по значению, которая содержит подстроку. Вы даете ему позицию и сколько символов читать. Поэтому немедленное исправление вашего кода может быть:

window.find(s.substr(j,1)) != window.end()

Кроме этого, обратите внимание, что std::map - это упорядоченная карта . Как таковой он обычно реализуется с помощью самобалансирующегося двоичного дерева. Если вам не нужен порядок, и вы действительно хотите, чтобы амортизированное постоянное время поиска соответствовало хешу, вам нужно std::unordered_map.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...