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
.