Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 实现了自定义哈希类,但它会导致程序因负整数而崩溃_C++_Hash - Fatal编程技术网

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)将其设为正数,这也是处理负数的正确方法?@Kronos
abs()在逻辑上没有任何错误。
。只是提出可能更快的替代解决方案。