class HashItem{
int key, val;
public:
HashItem(int k, int k): key(k), val(v){}
const int& getKey(){
return key;
}
const int& getVal(){
return val;
}
};
class HashTable{
static const int SIZE = 256;
vector<shared_ptr<HashItem>> table(SIZE);
public:
void set(key, val){
int idx = key%SIZE;
while(table[idx] && table[idx]->getKey() != key)//有这个bucket,且当前key不是idx对应的key,有冲突
idx = (idx+1)%SIZE;
if(table[idx]) delete table[idx];//当当前bucket已经被占用,冲突
table[idx] = new HashItem(key, val);
}
const int get(key){
int idx = key%SIZE;
while(table[idx] && table[idx]->getKey() != key)
idx = (idx+1)%SIZE; // SIZE不够大时,这里也面临死循环的问题
return table[idx] ? table[idx]->getVal() : -1; // 注意这里需要判断key不存在的情况
}
};
Hash Table
最新推荐文章于 2024-01-16 16:05:45 发布