正如我所理解的那样,实现哈希表是基于输入字符串计算索引,并直接返回它使其成为简单的键值存储。
这么简单的哈希函数看起来像
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会改变每个向量的增长。
桌子背后的逻辑是什么?什么是计算索引的最佳方法,即使增长矢量/数组?
答案 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);
}