2017-04-21 8 views
0

는 :C++지도 나 일부 데이터를 저장하기 위해 다음과 같은 데이터 구조를 필요

std::map<int, std::map<unsigned long, std::vector<unsigned long> > > lifetime ; 

map는 클래스의 인스턴스 멤버가 될 것입니다. 질문 : 내가 명시 적으로 new 또는 생성자를 사용하여 내부 컨테이너를 초기화해야 할 필요가 있습니까? 예를 들면 :

if (this->lifetime[sm].find(address) == this->lifetime[sm].end()) { 
    (this->lifetime[sm])[address] = std::vector<unsigned long>() ; 
} 

또한 벡터 및지도는 인스턴스 멤버로 초기화하고 중첩 할 때 내가 그뿐만 아니라 몇 가지 설명을 부탁드립니다 방법의 세부 사항을 이해하지 못하는 것 같습니다.

답변

4

operator[]을 사용하는 경우에는 필요하지 않습니다. operator[]이 아직 존재하지 않는 요소를 참조하는 데 사용되면 mapped_type 값이 초기화 된 항목이 자동으로 만들어집니다.

+0

그래서 이전의 초기화없이 'this-> lifetime [sm] [address] .push_back (current_cycle);'과 같은 것이 작동할까요? – DarthPaghius

+0

@parsoa 시도해보십시오. – xaxxon

+0

@xaxxon 잘 작동하지 않으며 벡터를 미리 초기화해야하는 이유가 무엇인지 설명 할 수 있습니까? – DarthPaghius