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)那么调用返回结果才正确,请问这个是因为什么啊!?
使用 char*,string(STL 可能已经实现),CString 作为 Key 时,你需要实现 compare 、hash 方法。
http://stackoverflow.com/questions/4157687/using-char-as-a-key-in-stdmap
另外,char * 指向的内存区域必须在 map 的生命周期类都是可用的。
最后,你使用了 static iterator ,这是错误的,同时也不是线程安全的。
我用 std::map<std::string,int> 可以了 怎么弄结果都正确,猜测是 char* 类型比较的问题 不知到对不对!?
二楼说的是,char*那个的compare方式需要重载一下,否则不对的,可以看看stl源代码,跟踪进去