1

我知道在插入新条目时,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

为什么即使我更改了地图的值,地图的大小也没有改变?

4

1 回答 1

5

首先,如果按大小表示地图中的条目数,则需要使用m.size()而不是sizeof(m). 后者测量std::map对象的大小(以字节为单位),这不是实际条目的存储位置。因此,无论您添加多少条目,该大小都不会改变。

其次,您的代码实际上并未向地图添加任何新条目。它仅向地图中的某些向量添加条目。

于 2013-07-17T15:16:50.503 回答