gpt4 book ai didi

c++ - 为什么这会产生运行时浮点错误?

转载 作者:搜寻专家 更新时间:2023-10-31 01:04:24 27 4
gpt4 key购买 nike

我正在为引入 HashMap 的学校做作业,因此我正在为使用 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();

我不太明白为什么这会产生浮点错误,因为我的工作完全是整数。对于键“banana”和值 3,散列 int 为 2068534322。在 this->size 为 5 的情况下,模数应计算为 2。

那么,为什么我会收到浮点错误?

编辑 1:我还尝试将 this->size() 替换为硬编码的 5(这是 this->size 应该评估的结果),所以this->size 用 0 计算没有问题。

最佳答案

你做了模(==除法)运算,所以你需要确保你的分母不为零

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();

关于c++ - 为什么这会产生运行时浮点错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24002386/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com