Элементы на карте переопределяются после использования map.find() [закрыто]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Элементы на карте переопределяются после использования map.find() [закрыто]

Сообщение Anonymous »

Я реализую кэш LRU для решения проблемы, когда мне нужно хранить пары ключ-значение.
Я сохраняю значения в связанном списке, который представляет собой очередь в порядке большинства недавно получен доступ, и я сохраняю ключ и указатель на узел значения в 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Элементы на карте переопределяются после использования map.find()
    Anonymous » » в форуме C++
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Переопределяются ли внутренние функции каждый раз, когда вызывается их родительская функция?
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Ширина и высота холста React-three/fiber переопределяются, и я не знаю, почему
    Anonymous » » в форуме CSS
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Когда я использую HashMap в Java, все мои значения переопределяются
    Anonymous » » в форуме JAVA
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Переменные CSS не переопределяются родителями
    Anonymous » » в форуме CSS
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»