哈希表=数组+链表 数组存hash值 链表存值
采用求余得到hash值:hash(x)=x%base
base为哈希值空间大小 当空间足够大时 搜索的复杂度平均为o(1)
此外可以通过迭代器删除节点值:
a.erase(it) it为该节点值的指针。
class MyHashSet {
vector<list<int>>set;
int base=256;
int hash(int key)
{
return key%base;
}
public:
/** Initialize your data structure here. */
MyHashSet() {
set.resize(base,list<int>());
}
void add(int key) {
int f=hash(key);
for(auto i=set[f].begin();i!=set[f].end();i++)
{
if(key==*i) return;
}
set[f].push_back(key);return;
}
void remove(int key) {
int f=hash(key);
for(auto i=set[f].begin();i!=set[f].end();i++)
{
if(key==*i) {set[f].erase(i); return;}
}
return;
}
/** Returns true if this set contains the specified element */
bool contains(int key) {
int f=hash(key);
for(auto i=set[f].begin();i!=set[f].end();i++)
{
if(key==*i) { return true;}
}
return false;
}
};
/**
* Your MyHashSet object will be instantiated and called as such:
* MyHashSet* obj = new MyHashSet();
* obj->add(key);
* obj->remove(key);
* bool param_3 = obj->contains(key);
*/