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; }
相关文章推荐
- map的下边访问和vector的下标访问的区别
- java 容器类使用 Collection,Map,HashMap,hashTable,TreeMap,List,Vector,ArrayList的区别
- stl容器区别: vector list deque set map-底层实现
- STL中基本容器string,vector,list,deque,set,map之间的区别
- STL 容器区别:vector、list、deque、set、map的底层实现
- STL 基本容器 : string、vector、list、deque、set、map 的区别
- C++ vector的访问(resize,pu_back与下标访问的区别)
- stl容器区别(内存布局和使用场合): vector list deque set map
- stl之容器区别: vector list deque set map
- java 容器类使用 Collection,Map,HashMap,hashTable,TreeMap,List,Vector,ArrayList的区别
- stl容器区别: vector list deque set map-底层实现
- 在STL中基本容器string、vector、list、deque、set、map之间的区别
- stl之容器区别: vector list deque set map
- stl容器区别: vector list deque set map及底层实现
- stl容器区别: vector list deque set map-底层实现
- stl容器的区别:vector list deque set map-底层实现
- stl容器区别: vector list deque set map-底层实现
- STL中基本容器string、vector、list、deque、set、map之间的区别
- stl容器区别: vector list deque set map及底层实现
- c++之Vector容器数据两种取值方法(指针访问,数组下标访问)