#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表实现(转)的更多相关文章

  1. QT中QString 与 int float double 等类型的相互转换

    Qt中 int ,float ,double转换为QString 有两种方法 1.使用 QString::number(); 如: long a = 63; QString s = QString:: ...

  2. C++中string类型的find 函数

    (去膜拜大佬的博客园,结果被自己菜到自闭) find string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回一个特别的标记npos. 对其返回的下标position ...

  3. [STL]string类型的getline函数

    3.cin.getline() 实际是cin.getline(接收字符串到m,接收个数n,结束字符).接收一个字符串,可以接收空格等,最后一个字符为‘\0’.结束符可以通过设置第三个参数自己设置,默认 ...

  4. Android中 int,float,Double,String 互相转换

    1 如何将字串 String 转换成整数 int?  A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt( ...

  5. c语言中int long float double 等类型所占字节及输出表示(转)

    16位编译器 char :1个字节 char*(即指针变量): 2个字节 short int : 2个字节 int: 2个字节 unsigned int : 2个字节 float: 4个字节 doub ...

  6. 学习hash_map从而了解如何写stl里面的hash函数和equal或者compare函数

    ---恢复内容开始--- 看到同事用unordered_map了所以找个帖子学习学习 http://blog.sina.com.cn/s/blog_4c98b9600100audq.html (一)为 ...

  7. java中Object转换成int或String类型方法

    转载: http://www.cnblogs.com/1020182600HENG/p/6137206.html Object obj = getObject(); if(obj instanceof ...

  8. c/c++中关于String类型的思考

    首先说明:String并不是一种内置类型,因此任何通过String声明出来的实例都不是一个变量,不同于内置类型因此String仅仅能称之为一种特殊的型别,没错String是一个类类型. 一般来说c语言 ...

  9. 浅谈Hash函数

    什么是hash函数: hash函数也可以翻译成“散列”函数,一般就使用音译“哈希”函数,简单的说哈希函数是对任意长度的输入进行的压缩映射,所谓的压缩映射顾名思义,输出通常来说要比输入短,并且得到的输出 ...

随机推荐

  1. C++11 并发指南六(atomic 类型详解三 std::atomic (续))

    C++11 并发指南六( <atomic> 类型详解二 std::atomic ) 介绍了基本的原子类型 std::atomic 的用法,本节我会给大家介绍C++11 标准库中的 std: ...

  2. Hadoop:Windows 7 32 Bit 编译与运行

    所需工具 1.Windows 7 32 Bit OS(你懂的) 2.Apache Hadoop 2.2.0-bin(hadoop-2.2.0.tar.gz) 3.Apache Hadoop 2.2.0 ...

  3. 西安.NET俱乐部群 推广代码

      CSS: .gallery-item { display:inline-block; margin: 15px; }   个人签名: <div class="gallery&quo ...

  4. Apache CXF Webservice入门

    1.步骤一览 关于CXF的介绍请移步官网.百科,这里仅供初次使用者入门. 2.步骤详情 2.1.环境准备 apache-cxf-3.0.0.zip下载 jdk1.7.0_51 Eclipse4.3.0 ...

  5. Oracle基础表空间建立,以及练习

    Oracle的表空间创建,可以采用网页的https://127.0.0.1:1158/em来进入oracle的页面进行创建表空间. 利用plsqldev.exe程序在表空间里添加数据: 首先要在use ...

  6. duilib进阶教程 -- 各种控件的响应 (10)

    到上一个教程为止,界面显示的代码就都介绍完啦,现在开始介绍控件的响应,其实在<2013 duilib入门简明教程 -- 事件处理和消息响应 (17)>里已经列出了duilib自己定义的所有 ...

  7. JAVA开发工具eclipse中@author怎么改

    1:JAVA开发工具eclipse中@author怎么改,开发的时候为了注明版权信息. 用eclipse开发工具默认的是系统用户,那么怎么修改呢 示例如图所示 首先打开Eclipse--->然后 ...

  8. Python面试题(一)

    **晚上在公司的论坛上看到一道面试题,题目如下:随机给定一字符串和字符,要求重排,比如:'abde','c'.重排之后变成'abcde' **看到他们给的答案很多都是二分法重排,既然是字符类的处理,当 ...

  9. [IOS]IOS UI指南

    [IOS]IOS UI指南 众所周知,IOS的界面设计,越来越流行,可以说都形成了一个标准,搜集了一些资料,供自己以后学习使用! iOS Human Interface Guidelines (中文翻 ...

  10. H5小游戏的坑点小结

    坑点: 1) iOS 9.1 的safari中,在onTouchBegan方法中调用cc.audioEngine.playEffect播放音效是没有效果的,如果在onTouchEnded调用则是正常的 ...