关于float /double、string类型的hash函数/hash表实现(转)
#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 = ;
double tmp = dValue;
if (dValue<)
{
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=;for(size_t i=;i<str.length();++i)
{
h = ( h<< ) - 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) == ;
}
} hash_str_cmp;
http://blog.csdn.net/templarzq/article/details/7702910
关于float /double、string类型的hash函数/hash表实现(转)的更多相关文章
- QT中QString 与 int float double 等类型的相互转换
Qt中 int ,float ,double转换为QString 有两种方法 1.使用 QString::number(); 如: long a = 63; QString s = QString:: ...
- C++中string类型的find 函数
(去膜拜大佬的博客园,结果被自己菜到自闭) find string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回一个特别的标记npos. 对其返回的下标position ...
- [STL]string类型的getline函数
3.cin.getline() 实际是cin.getline(接收字符串到m,接收个数n,结束字符).接收一个字符串,可以接收空格等,最后一个字符为‘\0’.结束符可以通过设置第三个参数自己设置,默认 ...
- Android中 int,float,Double,String 互相转换
1 如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt( ...
- c语言中int long float double 等类型所占字节及输出表示(转)
16位编译器 char :1个字节 char*(即指针变量): 2个字节 short int : 2个字节 int: 2个字节 unsigned int : 2个字节 float: 4个字节 doub ...
- 学习hash_map从而了解如何写stl里面的hash函数和equal或者compare函数
---恢复内容开始--- 看到同事用unordered_map了所以找个帖子学习学习 http://blog.sina.com.cn/s/blog_4c98b9600100audq.html (一)为 ...
- java中Object转换成int或String类型方法
转载: http://www.cnblogs.com/1020182600HENG/p/6137206.html Object obj = getObject(); if(obj instanceof ...
- c/c++中关于String类型的思考
首先说明:String并不是一种内置类型,因此任何通过String声明出来的实例都不是一个变量,不同于内置类型因此String仅仅能称之为一种特殊的型别,没错String是一个类类型. 一般来说c语言 ...
- 浅谈Hash函数
什么是hash函数: hash函数也可以翻译成“散列”函数,一般就使用音译“哈希”函数,简单的说哈希函数是对任意长度的输入进行的压缩映射,所谓的压缩映射顾名思义,输出通常来说要比输入短,并且得到的输出 ...
随机推荐
- Javascript日期与C# DateTime 转换
DateTime的日期到了客户端为:"/Date(1346818058450+0800)/"; 转吧: var renderTime = function (dateTime) { ...
- Java-基础练习1
1. Java为什么能跨平台运行?请简述原理. 因为Java程序编译之后的代码不是能被硬件系统直接运行的代码,而是一种“中间码”——字节码.然后不同的硬件平台上安装有不同的Java虚拟机(J ...
- windows必备,命令行工具cmder
下载cmder并安装! 64位可下,亲测: http://www.wmzhe.com/soft-31133.html 创建文件夹并进入文件夹命令: mkdir web-server && ...
- css之属性部分
这篇写的是今天的学习到的属性,一共20个. 属性再多,但也要会使用,会在使用时可以记起它,才能起到它为我们所需要的作用. 样式属性 1.border CSS边框属性允许你指定一个元素边框的样式和颜色. ...
- jquery导航栏html页面跳转导航字体变色
html代码: <div class="collapse"> <ul class="nav"> <li><a href ...
- Java注释Override、Deprecated、SuppressWarnings详解
一.什么是注释 说起注释,得先提一提什么是元数据(metadata).所谓元数据就是数据的数据.也就是说,元数据是描述数据的.就象数据表中的字段一样,每个字段描述了这个字段下的数据的含义.而J2SE5 ...
- Resource annotation is not supported on static fields
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'paramUtil' d ...
- 初识React,Virutal DOM, State以及生命周期
这是React分类下的第一篇文章,是在了解了一些基本面后,看Tyler文章,边看边理解边写的. React可以看做是MVC中的V,关注的是视图层.React的组件就像Angular的Directive ...
- Reservoir Sampling 蓄水池抽样算法,经典抽样
随机读取数据,如何保证真随机是不可能的,因为计算机的随机函数是伪随机的. 但是在不考虑计算机随机函数的情况下,如何保证数据的随机采样呢? 1.系统提供的shuffle函数 C++/Java都提供有sh ...
- checkbox的三种状态处理
checkbox只有两种值:选中(checked)或未选中(unchecked).它可以有任何值,但是表单提交时checkbox的值只能是checked或unchecked.它的默认值是uncheck ...