我试图从我的数组中删除一个元素,并想知道我是否可以使用与我的int ptrs的多个间接进行超高效。
我的固定数组的maxSize位于我的hashTable-> maxSize
中我需要能够引用我的hashTable的私有成员maxSize 仅供参考。变量:& maxSize,什么都不保留,它是NULL。 我的固定大小是hashTable-> maxSize;
bool hashmap::remove(char const * const symbol)
{
int **previous_index = &maxSize;
int *current_index = *previous_index;
while ( current_index &&
strcmp( symbol, hashTable[*current_index].m_symbol ) != 0 )
{
previous_index = ¤t_index + 1;
current_index = *previous_index;
}
return true;
}
我一直试图用* maxSize int单个ptr变量进行编译。 但我有很多代码,它们都受到了影响。和合。
答案 0 :(得分:3)
如果你真的想要一个hashmap,我建议你直接使用std :: tr1 :: unordered_map,在2003年被C ++标准的TR1接受并在许多编译器中实现。它将成为下一个标准(C ++ 0x)中的std :: unordered_map。
现在,如果你想要批评代码:不要使用C样式字符串,首选std :: string。如果您的代码将无条件地返回true,那么请考虑您的代码可能根本不应该返回。评论您的算法(不是每一行):向后搜索,直到找到匹配并将其删除。执行删除... 将帮助其他人检测您的代码不符合您的意图的位置。我还没理解你是如何尝试迭代数组的。代码可能与您在多个地方的意图不同。
如果您确实在实现哈希映射,那么您应该使用哈希算法来查找要删除的元素(如果它确实存在)。构建一个具有O(1)搜索时间进行线性搜索的复杂系统是没有意义的。
答案 1 :(得分:1)
散列映射可以轻松利用std::map<std::string, list<T *>>
来节省大量时间。利用私有地图,您的删除符号功能将非常简单:
bool hashmap::remove (const char *key)
{
m_map.remove(key);
}