我正在尝试使用单独链接实现散列。虽然我们只是为类hashnode
构造对象,但我无法理解hashmap
构造函数是如何初始化的。它们都是彼此私密的,而且我还没有从hashmap
派生出hashnode
课。那怎么办?
#include <iostream>
using namespace std;
static const int table_size = 10;
class hashnode {
public:
int key;
int value;
hashnode* next;
hashnode(int key, int value)
{
this->key = key;
this->value = value;
this->next = NULL;
}
};
class hashmap {
hashnode** table;
public:
hashmap()
{
table = new hashnode* [table_size];
for(int i=0;i<table_size;i++)
{
table[i] = NULL;
}
}
int hash(int key)
{
return key%table_size;
}
void insert(int key, int value)
{
int hash_val = hash(key);
hashnode* prev = NULL;
hashnode* entry = table[hash_val];
while(entry != NULL)
{
prev = entry;
entry = entry->next;
}
if(entry == NULL)
{
entry = new hashnode(key,value);
if(prev == NULL)
{
table[hash_val] = entry;
}
else
{
prev->next = entry;
}
}
else
{
entry->value = value;
}
}
void printtable(int key)
{
while(table[0] != NULL)
{
cout<<table[0]->key<<endl;
table[0] = table[0]->next;
}
}
};
int main()
{
hashmap hash1;
int key,value;
int choice;
答案 0 :(得分:0)
table = new hashnode* [table_size];
行是,正在调用hashnode
的构造函数。这是new
的作用;它为每个对象分配空间,然后调用对象的构造函数。
您要求编译器创建10个(基于table_size
)hashnode
个对象。