https://leetcode-cn.com/problems/design-hashmap/
思路:
v
e
c
t
o
r
+
f
o
r
w
a
r
d
_
l
i
s
t
vector+forward\_list
vector+forward_list,链地址法即可。
class node
{
public:
int key,value;
node(int k=0,int v=0):key(k),value(v){}
};
class MyHashMap {
public:
/** Initialize your data structure here. */
const int num=2333;
vector<forward_list<node>> table;
MyHashMap() {
table.resize(num);
}
/** value will always be non-negative. */
void put(int key, int value) {
int idx=key%num;
auto it=table[idx].begin(),ed=table[idx].end();
while(it!=ed)
{
if(it->key==key)
{
it->value=value;
return;
}
++it;
}
table[idx].emplace_front(key,value);
}
/** Returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key */
int get(int key) {
int idx=key%num;
auto it=table[idx].begin(),ed=table[idx].end();
while(it!=ed)
{
if(it->key==key)
return it->value;
++it;
}
return -1;
}
/** Removes the mapping of the specified value key if this map contains a mapping for the key */
void remove(int key) {
int idx=key%num;
auto it=table[idx].before_begin(),nxt=table[idx].begin(),ed=table[idx].end();
while(nxt!=ed)
{
if(nxt->key==key)
{
table[idx].erase_after(it);
return ;
}
it=nxt++;
}
}
};
/**
* Your MyHashMap object will be instantiated and called as such:
* MyHashMap* obj = new MyHashMap();
* obj->put(key,value);
* int param_2 = obj->get(key);
* obj->remove(key);
*/