Проблема с вашей get (int key)
функцией.Когда вы получаете доступ к кешу, вы должны сделать запись недействительной и обновить ваши итераторы.Вы делаете это с помощью функции addq
, но никогда не обновляете соответствующую запись в вашем hmap
.Поэтому возникает ошибка во время выполнения, потому что вы затем получаете доступ к итератору, который уже был аннулирован вашей addq
функцией.
Глядя на следующий фрагмент:
if(hmap.find(key) == hmap.end()) return -1;
addq(key);
return hmap[key].first;
addq
возвращаетитератор, но вы никогда не обновите итератор в вашей карте, поэтому это должно быть:
hmap[key].second = addq(key);