Pourquoi est-ce qui donne un temps d'exécution à virgule flottante d'erreur?
Question
Je suis en train de faire une mission pour l'école qui a introduit hashmaps, et je suis donc la création basé sur un modèle de classe pour une table de hachage qui utilise le std::hash
fonction.Le problème que je rencontre vient dans mon insert
la fonction, qui est indiqué ci-dessous:
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));
}
Mon erreur se produit à la ligne: int bucket = intKey % this->size();
.
Je ne comprends pas très bien pourquoi ce serait lui donner un flottant d'erreur depuis que je suis en train de faire mon travail entièrement en nombres entiers.Avec la touche "banane" et la valeur 3, le haché int est 2068534322.Dans le cas où this->size
est 5, le modulo devraient être évalués comme des 2.
Donc, exactement pourquoi suis-je arriver à virgule flottante d'erreur?
EDIT 1:J'ai aussi essayé this->size()
remplacé par un codées en dur 5 (qui est ce que this->size
devrait évaluer), de sorte que le this->size
n'est-ce pas un problème de l'évaluation par un 0.
La solution
Vous faire un modulo ( = = ) de la division de l'opération, si vous avez besoin d'assurer votre dénominateur n'est pas zéro
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));
}
Ou au moins une place assert
déclaration lors de cette opération à suivre la trace de faux appels provenaient de:
std::assert(this->size());
int bucket = intKey % this->size();