我有一個類型爲<const char *, std::list<void *>>
的unordered_map,並且我有一大堆我正在迭代的值來查看在某些情況下是否有匹配。如果有匹配,我想在值的索引處追加一個指向特定值的指針到std :: list。初始化一個std :: unordered_map的std :: list元素
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
是我遍歷正確,如果突破傳統,以獲取所有爲const char * C字符串作爲潛在的按鍵使用自定義列表類型,如果條件匹配。
但是,gdb顯示一個std :: list從未被初始化爲感興趣的鍵,我認爲這與我對每個handler_name的值初始化一個std :: list的恐懼有關,並且同時在追加新值之前需要檢查條目以查看列表是否已經存在。
在這種情況下進行正確初始化的最佳方法是什麼?
請發佈[MCVE] –
@ m.s。:除了'condition'外,這個問題對我來說看起來相當完整。 OP顯然有一個理解'初始化'的問題,並且不知道引用和值之間的區別。 – xtofl
這不完整。什麼是'all_handlers'? 'const char *'值來自哪裏? OP是否假設使用'=='比較相同內容的字符串文本?這裏有幾個假設。 –