私は型が<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を投稿してください。: '条件 'とは別に、この質問は私にはかなり完成しているようです。 OPは明らかに「初期化」を理解する上で問題があり、参照と値の違いは分かりません。 – xtofl
完了していません。 'all_handlers'とは何ですか? 'const char *'の値はどこから来ますか? OPは、同じ内容の文字列リテラルが '=='を使って等しいとみなしていると仮定していますか?ここではいくつかの前提があります。 –