我有一个代码模式,可以将一个整数转换为另一个整数。就像这样:
int t(int value) {
switch (value) {
case 1: return const_1;
case 3: return const_2;
case 4: return const_3;
case 8: return const_4;
default: return 0;
}
}
它目前大约有50个条目,也许以后会有更多,但可能不超过一两百个。所有的值都是预定义的,当然我可以按照它们的值来排序case标签。所以问题是,哪种方法更快——这种方法还是将其放入哈希映射中(我没有访问std::map,所以我说的是在我的SDK中可用的自定义哈希映射)并在该表中执行查找?也许这有点过早优化,不过...但我只需要你们的意见。
提前谢谢。
编辑:我的情况值将在0到0xffff范围内。关于哈希映射更易读的观点。我不确定它真的会更易读,因为我仍然需要用值填充它,所以常量映射表仍然需要在我的代码中某个地方。
编辑2:已经给出了许多有用的答案,非常感谢。我想在这里添加一些信息。我的哈希键是整数,我的整数哈希函数基本上只是一个乘法和整数溢出:
EXPORT_C __NAKED__ unsigned int DefaultHash::Integer(const int& /*aInt*/)
{
_asm mov edx, [esp+4]
_asm mov eax, 9E3779B9h
_asm mul dword ptr [edx]
_asm ret
}
因此,它应该非常快速。
std::map
不是哈希表(C++11 中的std::unordered_map
是)。 (2) 我们应该如何评估那个自定义哈希表的质量?它可能是非常糟糕的,也可能很出色。 - user395760