float/double,string 형식의hash 함수/hash표 구현
4889 단어 String 클래스
#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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
string 형식 함수 bcb dll, c# 호출BCB: C#:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.