Performance 提高哈希表的性能

Performance 提高哈希表的性能,performance,search,data-structures,insert,hashtable,Performance,Search,Data Structures,Insert,Hashtable,我必须在从txt文件获取输入的哈希表中搜索/插入多达1000000个元素,并且我需要高效地执行此操作。我写了一些代码,但当输入增长时需要几秒钟 我的结构是节点列表的向量。哈希键是长度为5的字符串。散列函数是djb(项似乎是均匀分布的) 这是我唯一使用的函数: void searchAndInsert (const string& key) { unsigned int i = Hash (key) % size; for (list<Node>::iterator it =

我必须在从txt文件获取输入的哈希表中搜索/插入多达1000000个元素,并且我需要高效地执行此操作。我写了一些代码,但当输入增长时需要几秒钟

我的结构是节点列表的向量。哈希键是长度为5的字符串。散列函数是djb(项似乎是均匀分布的)

这是我唯一使用的函数:

void searchAndInsert (const string& key)
{
unsigned int i = Hash (key) % size;

for (list<Node>::iterator it = v[i].begin(); it != v[i].end (); it++)
    if (it->getNome () == key)
        return;

    v[i].push_back (Node (key));
    ++elements;
}
void searchAndInsert(常量字符串和键)
{
无符号整数i=散列(键)%size;
for(list::iterator it=v[i].begin();it!=v[i].end();it++)
if(it->getNome()==key)
返回;
v[i]。推回(节点(键));
++元素;
}
我怎样才能改进它


谢谢大家,很抱歉我的英语不好D

将一百万行放入哈希表对我来说是一个非常糟糕的主意。假设您必须不止一次地执行此操作,我会将其批量复制到数据库中(可以很好地处理一百万行),然后查询您需要的数据。您使用的哈希表有多大?不管它是否均匀分布,如果它太小,它就会变慢。此外,如果许多输入字符串相同,则均匀分布的哈希函数不会说明太多。我建议改为考虑基于BST的实现(C++对吗?所以
std::set
std::map
)。可能是从文件中实际读取要比整个哈希表业务花费更多的时间。第二:看看生成的代码。也许迭代器会做一些奇怪的事情。最后一点:在开始插入可能会导致不必要的缓存丢失;在尾部插入不会成功,因为您已经在尾部。请尝试使用已编写的哈希表实现,而不是编写自己的哈希表实现。Boost中有一个,在某些情况下,和中的闭包散列函数性能更高。@doublep:除非你知道自己在做什么,并且想花点时间在上面。wakkebot的成功主要是由于其精心调整的手工构建的哈希表(有两个)。我刚刚运行了一个概要文件:它7秒钟的运行时间中,只有不到1%的时间花在了>600K的代币条目字典中。(这可能是600K的插入加上几个K的查找。)