我有一个包含歌曲列表的哈希表。通过将歌曲的标题翻译成ascii字符并使用此编号[%table size]作为键,将每个歌曲节点插入到表格中。每个歌曲节点中还有一个“艺术家”字段。如果我想显示特定艺术家的每首歌曲,我是否可以在不搜索整个表格中的每个节点的情况下这样做?我在下面提供了插入和散列方法。另外,哈希函数的适当名称是什么?
标题文件:
struct song {
string title;
string artist;
song* next;
};
class hash {
public:
hash();
int Hash_Key(string key); // For determining the hash key for a string
// Do I need to use multiple hash functions or multiple strings?
int Add_Item(string title, string artist); // for adding song to hash table
private:
static const int tableSize = 7;
song* HashTable[tableSize];
};
实现:
int hash::Add_Item(string title, string artist) {
int index = Hash_Key(name);
if(HashTable[index]->title == "empty") { // if first item at this index
HashTable[i]->title = title;
HashTable[i]->artist = artist;
}
else { // if not the first item at this index
song* temp = HashTable[index];
song* n = new song;
n->title = title;
n->artist = artist;
n->next = NULL;
while(temp->next != NULL) {
temp = temp->next;
}
temp->next = n;
}
return 0; // temporary
};
int hash::Hash_Key(string key) {
int hash = 0;
for(int i = 0; i < key.length(); i++) {
hash = hash + (int)key[i];
}
index = hash % tableSize; // remainder of the sum of ascii values of key
// divided by tableSize
return index;
}
答案 0 :(得分:0)
可能最好创建一个新的“艺术家 - &gt;歌曲*”地图,并在添加/删除项目时使这两个地图保持最新。