加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:41:59 所属栏目:百科 来源:网络整理
导读:我正在对我开发的软件进行一些性能分析,并且我发现URL的全局字典上的查找大约占应用程序“加载”阶段时间的10%.字典实现为C STL std :: map,具有O(lg n)个查找.我要将它移动到hash_map,它具有大致固定的时间查找. stl字符串类没有哈希代码属性,它肯定不会缓
我正在对我开发的软件进行一些性能分析,并且我发现URL的全局字典上的查找大约占应用程序“加载”阶段时间的10%.字典实现为C STL std :: map,具有O(lg n)个查找.我要将它移动到hash_map,它具有大致固定的时间查找. stl字符串类没有哈希代码属性,它肯定不会缓存哈希代码.这意味着每次查找都需要重新生成哈希码.

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

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

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读