unordered_map 타입이 <const char *, std::list<void *>>
이고 일부 조건에서 일치하는지 확인하기 위해 반복되는 값 목록이 있습니다. 일치하는 것이 있으면 값의 인덱스에있는 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 문자열을 모두 얻을 unconventionally 만약 내가 올바르게 이상 반복하고 사용자 지정 목록 유형입니다 , 조건에 일치가있는 경우.
그러나 gdb는 std :: list가 관심 키에 대해 초기화되지 않는다는 것을 보여 주며, handler_name의 모든 값에 대해 std :: list를 초기화하는 것에 대한 두려움과 관련이 있다고 생각합니다. 새로운 값을 추가하기 전에 항목이 이미 존재하는지 확인해야합니다.
이 경우 적절한 초기화를 수행하는 가장 좋은 방법은 무엇입니까?
[MCVE] –
@ m.s.:'조건'과 별개로,이 질문은 내게 완전히 완성 된 것처럼 보입니다. OP는 명확하게 '초기화'를 이해하는 데 문제가 있으며 참조와 값의 차이를 알지 못합니다. – xtofl
아직 완성되지 않았습니다. 'all_handlers' 란 무엇입니까? 'const char * '값은 어디서 오는 것입니까? OP는 같은 내용을 가진 문자열 리터럴이'=='을 사용하여 equal이라는 것을 가정하고 있습니까? 여기에는 몇 가지 가정이 있습니다. –