我理解在插入新条目时,stl map将复制构造和存储值而不是指针或引用。
但是,我对以下示例代码感到困惑:
int main( int argc, char** argv ){
map<int, vector<int> > m;
for(int i=0;i<10; i++){
m[i] = vector<int>();
}
cout<<sizeof(m)<<endl;
cout<<m[1].size()<<endl;
for(map<int, vector<int> >::iterator it=m.begin(); it!=m.end(); it++){
it->second.push_back(1);
it->second.push_back(1);
it->second.push_back(1);
}
cout<<sizeof(m)<<endl;
cout<<m[1].size()<<endl
}
输出
48
0
48
3
即使我正在更改地图的值,为什么地图的大小不变?
答案 0 :(得分:5)
首先,如果 size 表示地图中的条目数,则需要使用m.size()
而不是sizeof(m)
。后者测量std::map
对象的大小(以字节为单位),而不是实际条目的存储位置。因此,无论您添加多少条目,该大小都不会改变。
其次,您的代码实际上并未向地图添加任何新条目。它只会在地图中的某些向量中添加条目。