多个间接C ++整数类型

时间:2009-09-30 05:17:28

标签: c++

我试图从我的数组中删除一个元素,并想知道我是否可以使用与我的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 = &current_index + 1;
    current_index  = *previous_index;
}
return true;
}

我一直试图用* maxSize int单个ptr变量进行编译。 但我有很多代码,它们都受到了影响。和合。

2 个答案:

答案 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);
}