问题
考察一下两个代码片段:
实验结果
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
2) Fun2
总结
如有需要使用字符串作为map对象的key,请认准:map。