码迷,mamicode.com
首页 > 其他好文 > 详细

关于float /double、string类型的hash函数/hash表实现(转)

时间:2014-12-01 12:39:22      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   sp   for   on   

#include <ext/hash_map>
#include <math.h>
#include <stdio.h>
using namespace std;


#define FLT_EPSILON 1.192093e-007
#define DBL_EPSILON 2.2204460492503131e-016
#define FLOAT_EPSILON(a,b) ( a > b ? fabs(a) * FLT_EPSILON : fabs(b) * FLT_EPSILON)
#define DOUBLE_EPSILON(a,b) ( a > b ? fabs(a) * FLT_EPSILON : fabs(b) * DBL_EPSILON)
#define float_equal(a, b) (fabs((a)-(b)) <= FLOAT_EPSILON(a,b))
#define double_equal(a, b) (fabs((a)-(b)) <= DOUBLE_EPSILON(a,b))
#define INT64_MAX 0x7fffffffffffffffLL

typedef struct  
{  
    size_t operator()(const double & dValue) const  
    {     
        int e = 0 ;  
        double tmp = dValue;  
        if (dValue<0)  
        {  
            tmp = -dValue;  
        }  
        e = ceil (log (dValue));  
        return size_t(( INT64_MAX+ 1.0) * tmp * exp (-e));  
    }  
} hash_double; 

typedef struct  
{  
    bool operator()(const double &value1,const double &value2) const  
    {  
        return double_equal(value1,value2);  
    }  
} hash_double_cmp;  


typedef struct  
{  
    size_t operator()(const string & str) const  
    {  
        size_t h=0;for(size_t i=0;i<str.length();++i)  
        {  
            h = ( h<<5 ) - h + str[i];  
        }  
        return h;  
        //return __stl_hash_string(str.c_str());  
    }  
} hash_string;  

typedef struct  
{  
    bool operator()(const string &str1,const string &str2) const  
    {  
        return str1.compare(str2) == 0;  
    }  
} hash_str_cmp;  

http://blog.csdn.net/templarzq/article/details/7702910

关于float /double、string类型的hash函数/hash表实现(转)

标签:style   blog   http   io   ar   color   sp   for   on   

原文地址:http://www.cnblogs.com/bizhu/p/4134634.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!