Для каждого элемента в кэше нам нужно знать его положение в списке.
Однако, после удаления позиции, гарантирует ли list, что позиции (list :: iterator) после этой не будут изменены?
Да, вы можете реализовать LRU используя std::list а также std::map,
std::list итераторы, ссылающиеся на сохраненные элементы, не зависят от вставок и стираний других элементов. Смотрите этот ответ: Правила аннулирования итераторов