У меня есть unordered_map типа <const char *, std::list<void *>>
, и у меня есть большой список значений, которые я выполняю, чтобы проверить, есть ли соответствие в каком-либо состоянии. Если есть совпадение, я хочу добавить указатель на определенное значение в std :: list по индексу значения.Инициализация std :: list элементов std :: unordered_map
const char *handler_name = NULL;
while (handler_name = all_handlers->get(), handler_name)
{
if (condition)
{
//Add pointer element to every event handler it registers
std::list<void *> scripts = responders[handler_name];
if (scripts.size() == 0)
{
responders[handler_name] = scripts;
}
scripts.push_back(static_cast<void *> (L));
active_states[static_cast<void *> (L)] = 1; //set to active so we only delete it once
}
handler_name = NULL;
}
Это мои объявления переменных:
private:
std::unordered_map<const char*, std::list<void *>> responders;
std::unordered_map<void *, int> active_states;
all_handlers
тип пользовательского списка, который я итерация правильно, если нетрадиционно, чтобы получить все константные строки символ * C, чтобы использовать в качестве потенциальных ключей , если есть соответствие при условии.
Однако gdb показывает, что std :: list никогда не инициализируется для интересующего ключа, и я думаю, что это имеет какое-то отношение к моему страху инициализации std :: list для каждого значения handler_name и одновременно необходимо проверить запись, чтобы увидеть, существует ли список до добавления нового значения.
Каков наилучший способ сделать правильную инициализацию в этом случае?
отправьте сообщение [MCVE] –
@ m.s.: кроме «условия», этот вопрос выглядит вполне полным для меня. У ОП явно есть проблема понимания «инициализации» и не знает разницы между ссылками и значениями. – xtofl
Это не полно. Что такое 'all_handlers'? Откуда берутся значения 'const char *'? Является ли OP предположением, что строковые литералы с одинаковым содержимым сравниваются с использованием '=='? Здесь есть несколько предположений. –