STL 小记

//移除迭代器所指元素的正确做法
typedef std::map<std::string,float> StringFloatMap;
StringFloatMap coll;
StringFloatMap::iterator pos;

for(pos = coll.begin(); pos != coll.end(); )
{
	if(pos->second == value)
		coll.erase(pos++);
	else
		++pos;
}

//插入key/value时的3种方法
//方法1
std::map<std::string,float> coll;
coll.insert(std::map<std::string,float>::value_type("otto",22.3));


//方法2
std::map<std::string,float> coll;
//use implict conversition
coll.insert(std::pair<std::string,float>::value_type("otto",22.3));
//use no implict conversition
coll.insert(std::pair<const std::string,float>::value_type("otto",22.3));

//方法3
std::map<std::string,float> coll;
coll.insert(std::make_pair("otto",22.3));

通常,关联式容器并不提供元素的 直接存取,你必须依靠迭代器。不过map是个例外。Non-const map提供下标操作符,支持元素直接存取。
下标操作符的索引值并非元素整数位置,而是元素的key。

如果你使用某个key作为索引,而窗口之中尚未存在对应元素,那么就会自动安插该元素。新元素的value由default构造函数构造。如果元素的value型别没有提供default构造函数,就不能使用。所有基本数据型别都提供有default构造函数,以0值为初值。、

优点:
std::map<std::string,float> coll;
coll["otto"] = 7.7;
其中的语句coll["otto"] = 7.7;处理如下:
1,处理coll["otto"]
 - 如果存在键值为"otto"的元素,以上式子返回该元素的reference
 - 如果没有任何元素的键值是"otto",以上式子便为map自动安插一个新元素,键值为"otto",实值value则以default构造函数完成,并返回一个reference引用。
2,将7.7赋值给value
 - 紧接着,将7.7赋值给上述刚刚诞生的新元素。
 
 缺点:
 可能不小心误置新元素。例如:cout<<coll["ottto"];它会安插一个键值为"ottto"的新元素,然后打印实值 。
 
 同时这种元素安插方式比 一般的map安插方式来得慢原因是新元素必须先使用 default构造函数将实值初始化,而这个初值马上又被真正的value给覆盖了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值