c – 我应该缓存用作哈希键的STL字符串的哈希码吗?

前端之家收集整理的这篇文章主要介绍了c – 我应该缓存用作哈希键的STL字符串的哈希码吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在对我开发的软件进行一些性能分析,并且我发现URL的全局字典上的查找大约占应用程序“加载”阶段时间的10%.字典实现为C STL std :: map,具有O(lg n)个查找.我要将它移动到hash_map,它具有大致固定的时间查找. stl字符串类没有哈希代码属性,它肯定不会缓存哈希代码.这意味着每次查找都需要重新生成哈希码.

我怀疑缓存哈希码是值得的.这将意味着更改许多代码行以使用具有缓存哈希代码属性的新字符串类.鉴于当前实现在每次查找时都会记录(n)完整的字符串比较,我认为每次查找将其减少到基本上一次字符串遍历(通过散列函数)是一个很大的胜利.

有没有人有缓存字符串哈希码的经验?有没有证明值得付出努力?

解决方法

我没有缓存哈希码的经验,但我最近做了一些工作,将std :: map转换为std :: tr1 :: unordered_map.想到两个想法.首先,尝试首先分析相对简单的更改,因为它有时会使事情变得更糟,这取决于您的代码正在做什么.在您尝试进一步优化之前,它可能会为您提供足够的加速.其次,您的探查器对其他90%的初始化时间有何评论?即使您将全局字典内容优化到0次,您最多也可以将性能提高10%.

猜你在找的C&C++相关文章