我的主要数据对象是一个双精度数组,该数组的长度取决于类的特定实例.我想构造一个非常简单的哈希表来存储/检索这些对象,并且我们可以假设数字的生成没有数字错误.
int main() {
std::tr1::unordered_map cache;
double x1[] = { 1.0, 3.14 };
double x2[] = { 1.0, 3.14 };
cache[x1] = x1;
std::cout << "x1: " << cache.count(x1) << std::endl;
std::cout << "x2: " << cache.count(x2) << std::endl;
return 0;
}
以上显然只比较了指针,给出了输出:
> ./tmp
x1: 1
x2: 0
当我真的想看:
> ./tmp
x1: 1
x2: 1
很显然,当在编译时固定数组的大小时,如何创建自定义哈希和相等函数,但是我不知道如何制作依赖于特定实例的自定义函数……我在下面创建了一个类,但是我我不确定它是否有用或如何使用.
class Hash_double_vec {
public:
int dim;
Hash_double_vec(int d) { dim = d; }
size_t operator()(const double *x) const{
std::tr1::hash hash_fn;
size_t r = hash_fn(x[0]);
for(int i=1;i
return r;
}
bool operator()(const double *x, const double *y) const{
for(int i=1;i 1e-10) return false;
return true;
}
};