js map 只输出key_深度理解:使用字符串作为STL中map对象的key

问题

考察一下两个代码片段:

7c3c310984b1b83ce4b89ba5b3f40d1f.png

实验结果

1) Fun1将打印:Key value found。

2) Fun2将打印:Key value NOT found。<== 奇怪,为什么会找不到?

结果分析

1) 先分析Fun1,其声明的map对象的key为一个CString对象,其值类型为int。当使用find方法查询值时,将根据CString的字符串值进行查找匹配,因key “dll”已经存在于map对象中,所以指定的元素存在,故程序输出:Key value found。

2) 再来看Fun2,直觉上,其结果应该和Fun1一致。但是,注意了,这里的key的类型是LPCTSTR,也即是指向一个字符串的指针地址,这个地址充当了这个map对象的key,当我们向find方法传入_T(“dll”)时,虽然字符串的字面值一致,但是其地址已经不一样了,所以,find方法尝试使用字符串指针地址进行查询匹配时,就找不到指定的元素了。

我们可以通过VS的调试环境观察map对象的内部结构:

1) Fun1

55d0f53e17e51f22946d3f35e99bfbe0.png

2) Fun2

a777b5b768798ad3578f9df2ad40320d.png

总结

如有需要使用字符串作为map对象的key,请认准:map。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值