Как исправить «ссылка на тип требует инициализатора»? - PullRequest
0 голосов
/ 18 октября 2019

Я работаю над реализацией LRU Cache на основе упражнения LeetCode, но следующий код не компилируется

using namespace std;

class LRUCache {
private:
    list<int> data;
    unordered_map<int, list<int>::iterator&> keys_to_data;

    void update_recency(int key, list<int>::iterator& it) {
        data.erase(it);
        data.push_front(key);
        keys_to_data[key]; // issue here
    }
public:
    LRUCache(int capacity) {

    }

    int get(int key) {
        int value = -1;
        auto value_it = keys_to_data.find(key);
        if(value_it != keys_to_data.end()) {
            value = *(value_it->second);
            update_recency(key, value_it->second);
        }
        return value;
    }

    void put(int key, int value) {
    }
};

/ Library / Developer / CommandLineTools / usr / include / c ++ / v1 / tuple: 1360: 7: ошибка: для ссылки на тип 'std :: __ 1 :: __ list_iterator' требуется секунда инициализации (_VSTD :: forward <_Args2> (_ VSTD :: get <_I2> (__ second_args)) ...) ^

... огромная трассировка стека ...

/ Users / Paul / Desktop / int / main.cpp: 17: 21: примечание: при создании функции-члена 'std :: __ 1 :: unordered_map &,std :: __ 1 :: hash, std :: __ 1 :: equal_to, std :: __ 1 :: allocator &>>> :: operator [] 'запрашивается здесь keys_to_data [key];

Ответы [ 2 ]

3 голосов
/ 18 октября 2019

Вы не можете сохранить ссылку в качестве значения на карте

unordered_map<int, list<int>::iterator&>

Поскольку ссылка не может быть назначена.

0 голосов
/ 18 октября 2019

Хранение итератора, а не ссылка на итератор

unordered_map :: iterator> keys_to_data;

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