【发布时间】:2011-04-11 14:24:45
【问题描述】:
我想实现一个性能优化的unordered_map 变体,它分几个阶段工作:
- 初始化:在
std::map中插入大约100个元素 - 准备工作:做一些魔术,将
std::map转换为std::unordered_map的变体 - 工作:执行大量(无限)查找;禁止插入/删除
为了使“工作”阶段尽可能快,我想为给定的一组键选择一个没有冲突的散列函数(在初始化阶段收集)。
我想衡量我可以从这个技巧中获得多少性能改进。所以这将是一个实验,可能会进入生产代码。
标准库是否有用于此实现的功能(例如,查找给定的 unordered_map 有多少冲突;或更改散列函数)?还是我应该自己实现?
【问题讨论】:
-
看看 gperf 以生成完美的散列函数(当然,如果您希望散列完美,则需要将 所有 输入交给它... )
-
我很确定 gperf 需要在编译时知道完整的项目集。
-
使用完美散列等现有方法怎么样? en.wikipedia.org/wiki/Dynamic_perfect_hashing
标签: c++ optimization hash c++-standard-library