我想知道是否可以得到一些帮助,以防止重复输入哈希表:
bool hashmap::put(const stock& s, int& usedIndex, int& hashIndex, int& symbolHash)
{
hashIndex = this->hashStr( s.m_symbol ); // Get remainder, Insert at that index.
symbolHash = (int&)s.m_symbol;
usedIndex = hashIndex;
while ( hashTable[hashIndex].m_symbol != NULL ) // collision found
{
++usedIndex %= maxSize; // if necessary wrap index around
if ( hashTable[usedIndex].m_symbol == NULL )
{
hashTable[usedIndex] = s;
return true;
}
}
hashTable[hashIndex] = s; // insert if no collision
return true;
}
参数hashIndex使用Java算法生成适当的索引以插入表中。 usedIndex参数是发现冲突时插入表中的位置。 symbolHash只是获取传入的名称的地址。stock是一个类对象。
我的问题是,如何防止重复输入?
最佳答案
只需查看存储在该索引中的对象即可。如果由于碰撞而不得不移动索引,也请检查这些索引。如果它们与您要存储的内容匹配,请抛出异常或其他内容。
我正在猜测您的代码,所以...
bool hashmap::put(const stock& s, int& usedIndex, int& hashIndex, int& symbolHash)
{
hashIndex = this->hashStr( s.m_symbol ); // Get remainder, Insert at that index.
symbolHash = (int&)s.m_symbol;
usedIndex = hashIndex;
if(hastTable[usedIndex].m_symbol == s.m_symbol){
return false;
}
while ( hashTable[hashIndex].m_symbol != NULL ) // collision found
{
++usedIndex %= maxSize; // if necessary wrap index around
if ( hashTable[usedIndex].m_symbol == NULL )
{
hashTable[usedIndex] = s;
return true;
}else if(hastTable[usedIndex].m_symbol == s.m_symbol){
return false;
}
}
hashTable[hashIndex] = s; // insert if no collision
return true;
}
关于c++ - 防止重复输入哈希表C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1569085/