Cpp关于static关键字的问题
Leetcode 706. 设计哈希映射。
为什么base和hashfunc需要设置为static,不然就会报错(报错内容附下)。static在这里起了什么作用?
class MyHashMap {
public:
vector<list<pair<int,int>>> data;
static const int base = 769;//为什么必须使用static?
static int hashfunc(int k){
return k % base;
}
MyHashMap(): data(base) {
}
void put(int key, int value) {
int adr = hashfunc(key);
for(auto it = data[adr].begin();it!=data[adr].end();it++){
if(it->first == key){
it->second = value;
return;
}
}
data[adr].push_back(make_pair(key, value));
}
int get(int key) {
int adr = hashfunc(key);
for(auto it = data[adr].begin();it!=data[adr].end();it++){
if(it->first == key){
return it->second;
}
}
return -1;
}
void remove(int key) {
int adr = hashfunc(key);
for(auto it = data[adr].begin();it!=data[adr].end();it++){
if(it->first == key){
data[adr].erase(it);
return;
}
}
return;
}
};
执行出错信息:
terminate called after throwing an instance of 'std::length_error'
what(): cannot create std::vector larger than max_size()
最后执行的输入:
["MyHashMap","put","put","get","get","put","get","remove","get"]
[[],[1,1],[2,2],[1],[3],[2,1],[2],[2],[2]]