C++中对hash_map自定义哈希函数和比较函数的理解

        首先申明一下,我是菜鸟,真正的菜鸟,不是谦虚。所以很多地方有错误,需要大家指出。我只是为了记录,顺便加深自己的理解,不是为了炫耀什么。     

       这两天学习使用hash_map,在网上搜索了一下,没搜到详细介绍hash_map工作原理的内容(可能是我的搜索方式有问题),然后就自己复制别人的代码,进行修改后使用。就因为是copy别人的代码,就多了后面这些教训了。。

     

做实验用的源代码如下:

#include "stdafx.h" #include <iostream> #include <hash_map> #include <vector>

using std::vector; using stdext::hash_map;

class  hash_wchar_t { public:  // 以下两个变量我也不是很明白究竟是干嘛的  static const size_t   bucket_size = 4;   // 猜测这个变量是初始化hash_map的大小  static const size_t   min_buckets = 8;   // 猜测这个变量是每次扩充容量的大小  // 以上猜测是根据vector得来的,其实我基本上没使用过STL,只是在C++Primer上看到过,很粗略的看。

 size_t operator()(const   wchar_t&   GBword) const        {   return GBword%100;       // 下面的那个哈希函数算法是我在网上搜索的说是适合汉字使用的。   // 具体适不适合我也不知道,这里测试的时候可以用简单的   // return ((unsigned char)GBword-176)*94 + (unsigned char)(GBword>>8) - 161;        }  

 bool operator()(const wchar_t& s1,const wchar_t& s2) const        {    // copy别人代码的时候,由于Key类型是char类型字符串,所以是这么写的   // return 0 == strcmp(s1,s2);   // 我针对自己使用的Key类型,在修改了参数的形式之后,很天真的就这么使用,这是问题的关键!!      // 写成这种形式,在下面 测试能否找到的时候,始终出问题,   // 原因是p指针指向的是一个未初始化的内存区域,所以无法取数据   // 具体原理在代码后面解释   return s1 == s2;   

  // 最后的正确用法   // return s1 < s2;   // 或者 return s2 > s1;

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值