我正在为学校做一个引入了hashmaps的作业,所以我正在为使用std::hash
函数的hashmap创建一个模板化的类。我遇到的问题出现在insert
函数中,如下所示:
template <class K, class V>
void HashMap<K, V>::insert(K key, V value)
{
std::hash<std::string> stringHash;
int intKey = stringHash(key);
int bucket = intKey % this->size();
map[bucket].push_back(std::pair<K, V>(key, value));
}
我的错误发生在以下行:int bucket = intKey % this->size();
。
我不太明白为什么这会产生浮点错误,因为我完全用整数做我的工作。用钥匙&#34;香蕉&#34;值3,散列int为2068534322.在this->size
为5的情况下,模数应计算为2.
那么,为什么我得到一个浮点错误?
编辑1:我还尝试将this->size()
替换为硬编码的5(this->size
应评估的内容),因此this->size
没有问题用0评估。
答案 0 :(得分:4)
你做模数(==除法)操作,所以你需要确保你的分母不为零
template <class K, class V>
void HashMap<K, V>::insert(K key, V value)
{
std::hash<std::string> stringHash;
int intKey = stringHash(key);
int bucket = this->size() ? intKey % this->size() : intKey;
// or whatever makes sense to assign for the latter condition
map[bucket].push_back(std::pair<K, V>(key, value));
}
或者至少在执行此操作时发出assert
语句来跟踪错误来电的来源:
std::assert(this->size());
int bucket = intKey % this->size();