注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

dingchaoqun12 的博客

上海股票期货开户

 
 
 

日志

 
 
 
 

hash_map用C风格字串char*作为key的疑问 - C/C++ / 新手乐园  

2012-10-08 23:00:06|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
vc2003下使用hash_map时如果用char*作为key时不能使用默认的比较函数,而要自写比较函数。以下是代码:
=================================================================
#include <hash_map>
using namespace std;
int main()
{
 hash_map <char*, char*> test;
 test.insert(pair("aa", "11"));
 test.insert(pair("bb", "22"));
 test.insert(pair("cc", "33"));
 hash_map <char*, char*>::iterator it;
 //测试1
 it = test.find("bb");
 char *res = it->second;
 cout<<res<<endl;//正确输出22
 //测试2
 char *input = "bb";
 it = test.find(input);
 char *res = it->second;
 cout<<res<<endl;//正确输出22
 //测试3
 char temp[] = "bb";
 char *input = temp;
 it = test.find(input);//或写:it = test.find(temp);
 char *res = it->second;
 cout<<res<<endl;//无法找到
}
为什么测试3无法找到元素?
=================================================================
#include <hash_map>
using namespace std;
struct stl_char_compare
{
bool operator()(const char* s1, const char* s2) const
 {
  return strcmp(s1, s2) == 0;
 }
};
int main()
{
 hash_map <char*, char*, hash_compare<char *, stl_char_compare> > test;
 test.insert(pair("aa", "11"));
 test.insert(pair("bb", "22"));
 test.insert(pair("cc", "33"));
 hash_map <char*, char*>::iterator it;
 //测试1
 it = test.find("bb");
 char *res = it->second;
 cout<<res<<endl;//错误输出11
 //测试2
 char *input = "bb";
 it = test.find(input);
 char *res = it->second;
 cout<<res<<endl;//错误输出11
 //测试3
 char temp[] = "bb";
 char *input = temp;
 it = test.find(input);//或写:it = test.find(temp);
 char *res = it->second;
 cout<<res<<endl;//错误输出11
}
这个例子提供了一个自写比较函数,但各种情况下都不能找到元素。
=================================================================
#include <hash_map>
using namespace std;
struct mystruct{
 int iID;
 int len;
 bool operator==(const mystruct & my) const{
  return (iID==my.iID) && (len==my.len);
 }
};
int main()
{
 hash_map <char*, char*, hash<char *>, mystruct> > test;
}
大量stl教程和例程都是这样指定自己的哈希函数和比较函数,但在vc2003下编译说找不到hash标识符,显然是指hash<char*>。这是为何。
=================================================================

请问使用hash_map,用char*作为key,如何让测试3通过?不胜感谢!


引文来源  hash_map用C风格字串char*作为key的疑问 - C/C++ / 新手乐园
  评论这张
 
阅读(579)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017