首页 新闻 会员 周边 捐助

关于C++ std::map容器,传参相同,返回的结果竟然不一样!?

0
悬赏园豆:50 [已解决问题] 解决于 2013-12-20 20:50

bool haveimg( const char *name )
{
static std::map<const char *,int>::iterator it;
it = tex.find(name);
if (it != tex.end())
{
return true;
}
return false;
}

(1) haveimg("ct_people_0") 

(2)

char szBuffer[255];

_sntprintf(szBuffer,sizeof(szBuffer),"ct_people_%d",i);//i为0-20

haveimg(szBuffer)

这个只有像(1)那么调用才返回正确的结果,而像(2)那么调用,始终返回错误.

 就是在map中,我还没有插入这个数据,应该返回false,但是(2)查找到了.返回真, 我试了一下,无论 _sntprintf(szBuffer,sizeof(szBuffer),"ct_people_%d",i); 这里面写什么,都返回true

只有像(1)那么调用返回结果才正确,请问这个是因为什么啊!?

问题补充:

我 的编译环境 是 xp sp3 ghost系统, vs2003.

yuan远的主页 yuan远 | 初学一级 | 园豆:161
提问于:2013-12-19 23:29
< >
分享
最佳答案
0

使用 char*,string(STL 可能已经实现),CString 作为 Key 时,你需要实现 compare 、hash 方法。

http://stackoverflow.com/questions/4157687/using-char-as-a-key-in-stdmap

另外,char * 指向的内存区域必须在 map 的生命周期类都是可用的。

最后,你使用了 static iterator ,这是错误的,同时也不是线程安全的。

收获园豆:50
Launcher | 高人七级 |园豆:45050 | 2013-12-20 09:38
其他回答(2)
0

我用 std::map<std::string,int> 可以了 怎么弄结果都正确,猜测是 char* 类型比较的问题 不知到对不对!?

yuan远 | 园豆:161 (初学一级) | 2013-12-19 23:46
0

二楼说的是,char*那个的compare方式需要重载一下,否则不对的,可以看看stl源代码,跟踪进去

2012 | 园豆:21645 (高人七级) | 2013-12-20 10:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册