2017-04-21 58 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