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