与向量的简单的哈希表

时间:2016-03-26 09:45:30

标签: c++ hash hashtable

正如我所理解的那样,实现哈希表是基于输入字符串计算索引,并直接返回它使其成为简单的键值存储。

这么简单的哈希函数看起来像

int hash( string name ){

    int index = 0;
    int hash = 0;
    for ( int i = 0; i < name.length() ;i++){
        hash += (int)name[i];
    }
    index = sizeOfArray % hash;
}

SizeOfArray是具有预定义大小的指针数组。如果此索引不存在则创建它。但我如何用向量实现它?

Vector没有预定义的大小。他们自动成长。所以调用sizeOfArray%hash会改变每个向量的增长。

桌子背后的逻辑是什么?什么是计算索引的最佳方法,即使增长矢量/数组?

1 个答案:

答案 0 :(得分:1)

您可以使用vector<list<string>>作为哈希表的基础数据结构 此外,您的索引计算错误;而不是sizeOfArray % hash,它应该反过来。

vector<list<string>> hash_table;
const size_t hash_table_size = 100;
hash_table.resize(hash_table_size);

int hash( string name ){
    int index = 0;
    int hash = 0;
    for ( int i = 0; i < name.length() ;i++){
        hash += (int)name[i];
    }

    index = hash % hash_table.size();
    hash_table[index].push_back(name);
}