#pragma once
#include<iostream>
using namespace std;
#include<vector>
class Bitset
{
public:
Bitset(size_t value)
{
_a.resize((value >> 5) + 1, 0);
}
bool set(size_t num)
{
size_t index = num>>5;
size_t pos = num % 32;
if (_a[index] & (1 << (31 - pos)))
{
return false;
}
else
{
_a[index] |= (1 << (31 - pos));
_size++;
return true;
}
}
bool Reset(size_t num)
{
size_t index = num >> 5;
size_t pos = num % 32;
if (Text(num))
{
_a[index] &= ~(1 << (31 - pos));
_size--;
return true;
}
else
{
return false;
}
}
bool Text(size_t num)
{
size_t index = num >> 5;
size_t pos = num % 32;
return _a[index] & (1 << (31-pos));
}
private:
vector<int> _a;
size_t _size;
};
#pragma once
template<class T> //各类哈希字符串转换函数
size_t BKDRHash(const char *str)
{
register size_t hash = 0;
while (size_t ch = (size_t)*str++)
{
hash = hash * 131 + ch;
}
return hash;
}
template<class T>
size_t SDBMHash(const char *str)
{
register size_t hash = 0;
while (size_t ch = (size_t)*str++)
{
hash = 65599 * hash + ch;
}
return hash;
}
template<class T>
size_t RSHash(const char * str)
{
size_t hash = 0;
size_t magic = 63689;
while (size_t ch = (size_t)*str++)
{
hash = hash * magic + ch;
magic *= 378551;
}
return hash;
}
template<class T>
size_t APHash(const char *str)
{
register size_t hash = 0;
size_t ch;
for (long i = 0; ch = (size_t)*str++; i++)
{
if ((i & 1) == 0)
{
hash ^= ((hash << 7) ^ ch ^ (hash >> 3));
}
else
{
hash ^= (~((hash << 11) ^ ch ^ (hash >> 5)));
}
}
return hash;
}
template<class T>
size_t JSHash(const char* str)
{
if (!*str)
{
return 0;
}
size_t hash = 1315423911;
while (size_t ch = (size_t)*str++)
{
hash ^= ((hash << 5) + ch + (hash >> 2));
}
return hash;
}
#pragma once
#include"bite_set.h"
#include"Hash.h"
#include<string>
template<class T>
struct __HashFunk1
{
size_t operator()(const T& key)
{
return BKDRHash<T>(key.c_str());
}
};
template<class T>
struct __HashFunk2
{
size_t operator()(const T& key)
{
return SDBMHash<T>(key.c_str());
}
};
template<class T>
struct __HashFunk3
{
size_t operator()(const T& key)
{
return RSHash<T>(key.c_str());
}
};
template<class T>
struct __HashFunk4
{
size_t operator()(const T& key)
{
return APHash<T>(key.c_str());
}
};
template<class T>
struct __HashFunk5
{
size_t operator()(const T& key)
{
return JSHash<T>(key.c_str());
}
};
template<class K = string,
class HashFunk1 = __HashFunk1<K>,
class HashFunk2 = __HashFunk2<K>,
class HashFunk3 = __HashFunk3<K>,
class HashFunk4 = __HashFunk4<K>,
class HashFunk5 = __HashFunk5<K>>
class BoolFilter
{
public:
BoolFilter(size_t n)
:_a(n * 10)
, _range(n * 10)
{}
void set(const K& key)
{
_a.set(HashFunk1()(key) % _range);
_a.set(HashFunk2()(key) % _range);
_a.set(HashFunk3()(key) % _range);
_a.set(HashFunk4()(key) % _range);
_a.set(HashFunk5()(key) % _range);
}
bool Text(const K& key)
{
if (!_a.Text(HashFunk1()(key)% _range))
return false;
if (!_a.Text(HashFunk2()(key) % _range))
return false;
if (!_a.Text(HashFunk3()(key) % _range))
return false;
if (!_a.Text(HashFunk4()(key) % _range))
return false;
if (!_a.Text(HashFunk5()(key) % _range))
return false;
return true;
}
private:
Bitset _a;
size_t _range;
};
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有