您的位置:首页 > 其它

map这种容器的下边访问和Vector等容器的下标访问有本质的区别。

2012-03-31 16:43 441 查看
map这种容器的下边访问和Vector等容器的下标访问有本质的区别。

对于Vector容器,用aVector[i]访问第i个元素时,如果元素不存在,容器不会增加元素,

而对于map,用aMap[key]

访问键key对应的对象时,如果该键对应的对象存在,则返回该对象(这和Vector一样),但是,当键值为key的元素不存在时,容器会自动的增加一个pair,键为key,而值则为一个容器定义时指定的类型并默认初始化(即,如果该类型为基本类型,则初始化为0,比如本例中,aMap[1]的使用会产生一个pair,<1,NULL>,若该类型为类类型,则调用默认构造函数初始化之)

显然,本例中,aMap[1]为NULL,后面的erase()不会执行,使得后面的

插入语句aMap.insert(1,new A())键值冲突

eg:如下代码会导致错误

#include <iostream>

#include <map>

using namespace std;

struct A

{

A(int i)

{

x=i;

}

int x;

};

int main()

{

map<int,A*> amap;

if ( amap[1] != NULL )

amap.erase(1);

amap.insert(make_pair(1,new A(1)));

amap.insert(make_pair(2,new A(2)));

amap.insert(make_pair(3,new A(3)));

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: