哈希最重要的是哈希函数,和解决冲突的方法,本题使用的是拉链法解决冲突
class MyHashSet {
private:
vector<list<int>> data;
static const int number = 789;
int myhash(int n) {return n % number;};
public:
MyHashSet() : data(number) {
}
void add(int key) {
int index = myhash(key);
for(auto ite = data[index].begin(); ite != data[index].end(); ++ite){
if(*ite == key) return;
}
data[index].push_back(key);
}
void remove(int key) {
if(contains(key)){
data[myhash(key)].remove(key);
}
}
bool contains(int key) {
int index = myhash(key);
auto ite = data[index].begin();
while(ite != data[index].end()){
if(*ite == key) return true;
++ite;
}
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);
*/