Я сохраняю значения в связанном списке, который представляет собой очередь в порядке большинства недавно получен доступ, и я сохраняю ключ и указатель на узел значения в unordered_map типа . Я делаю это, чтобы обеспечить постоянную временную сложность для всех методов в кеше.
Итак, в методе put моего класса я проверяю, есть ли ключ уже присутствует на моей карте
if (mymap.find(key) != mymap.end())
Проблема в следующем: -
- Значение этого выражения всегда возвращает true
- Значение ключа, которое я проверяю, добавляется на карту
< /ul>
например, на карте есть - если я попытаюсь вставить , он переходит к «найденному на карте», даже если ключа 2 нет на карте.
- и вместо на всей карте есть только .
#include
#include
#include
using namespace std;
class Node
{
public:
int key;
int data;
Node *next;
Node *prev;
Node (int key, int data):key (key), data (data), next (NULL), prev (NULL)
{
}
Node (int key, int data, Node * prev):key (key), data (data), next (NULL),
prev (prev)
{
}
};
class LRUCache
{
public:
unordered_map < int, Node * >mymap;
Node *start;
Node *end;
int cap;
int capacity;
LRUCache (int capacity):mymap (), start (NULL), end (NULL),
cap (capacity), capacity (capacity)
{
}
void printMap ()
{
cout next = mymap[key]->next;
mymap[key]->next->prev = mymap[key]->prev;
end->next = mymap[key];
mymap[key]->prev = end;
end = mymap[key];
}
else
{
cout key);
temp = start;
start = start->next;
if (start != NULL)
start->prev = NULL;
delete temp;
cap++;
}
if (start == NULL)
{
start = end = new Node (key, value);
mymap[key] = end;
cap--;
}
else
{
end->next = new Node (key, value, end);
end = end->next;
mymap[key] = end;
cap--;
}
}
printMap ();
}
};
int
main ()
{
int capacity = 2;
LRUCache *obj = new LRUCache (capacity);
obj->put (1, 1);
obj->put (2, 2);
return 0;
}
выход, который я получаю:
Trynna put 1 & 1-> case NULL
map:
Trynna put 2 & 2-> case found
map:
Подробнее здесь: https://stackoverflow.com/questions/785 ... g-map-find