C++ 实现了自定义哈希类,但它会导致程序因负整数而崩溃
我一直在尝试实现一种简单的散列方法,它可以完美地处理正整数,但它会在处理负数时崩溃。代码如下:C++ 实现了自定义哈希类,但它会导致程序因负整数而崩溃,c++,hash,C++,Hash,我一直在尝试实现一种简单的散列方法,它可以完美地处理正整数,但它会在处理负数时崩溃。代码如下: void HashTable::insert(long long int key){ //hash function: h(k) = k mod (p) long long int hash = key % tableSize; while (hashTable[hash] != NULL){ // Change hash value to n
void HashTable::insert(long long int key){
//hash function: h(k) = k mod (p)
long long int hash = key % tableSize;
while (hashTable[hash] != NULL){
// Change hash value to next position (+1)
hash = (hash + 1) % tableSize;
}
hashTable[hash] = key;
}
问题是,当按键为负时,mod的结果将为负,并导致程序崩溃。当我取它的绝对值时,它是有效的,但是我不确定它是否是正确的方法
有什么建议吗
编辑:这是课程:
class HashTable{
private:
long int tableSize;
long long int *hashTable;
public:
HashTable(long int);
void insert(long long int);
};
只需将密钥作为未签名的-无需执行额外的操作即可获得正数:
void HashTable::insert(uint64_t key){
//hash function: h(k) = k mod (p)
uint64_t hash = key % tableSize;
// rest as before
}
或者,如果您将
表大小设置为成员无符号
,则%
运算符的结果也将是无符号
显示所用变量的声明。boost::无序映射
@Blacktempel将类添加到ophash点,以使用可复制的置乱器。abs()符合这一描述。因此,即使我使用abs(key)将其设为正数,这也是处理负数的正确方法?@Kronosabs()在逻辑上没有任何错误。
。只是提出可能更快的替代解决方案。