0

我打算switch发表声明,但后来意识到不能针对string. 于是我接着写了一个if//语句else ifelse然后意识到我不应该把我的函数写得那么长。因此,我打算将函数调用放在每个级联if块的主体中​​,并认为使用hash_map/unordered_map指向一组函数指针可能会更好。

我的问题是:

  1. 使用 hash_map 指向要使用的函数并以这种方式调用它会更有效吗?

    IIRC,地图应该接近 O(1),作为级联 if 需要一直测试直到找到匹配项,因此为 O(N)。但是,使用带有字符串键的映射,O(1) 在什么时候(多少 N)超过了 O(N) 的性质?

  2. 它是更好的编码风格吗?

    由于我正在减少将特定代码封装成特定于需要完成的操作的较小函数,我认为这是正确的。我知道这更多是一个意见问题,但作为一个社区,我认为这仍然是一个有效的问题。

4

2 回答 2

5
  1. 取决于很多事情——你的表有多大,分支预测器中缓存未命中的性能影响有多大,你可以首先优化最常见的情况,你的哈希函数有多密集,以及是否这些哈希被缓存,你得到多少冲突以及你如何重新映射这些冲突。它往往是哈希,但在某些情况下可能不是。

  2. 地图更干净。它更容易理解,并且您不会有人决定在 if 语句的 15 个分支中的 1 个分支中投入特殊情况逻辑,然后在调试和维护中丢失。

于 2013-05-17T20:10:29.463 回答
3

使用 hash_map 指向要使用的函数并以这种方式调用它会更有效吗?

我认为这两种方法的效率都不会成为问题,除非您计划拥有大量的字符串/函数指针(在这种情况下,您的建议是唯一可行的选择)。

它是更好的编码风格吗?

我会这么说。它当然看起来更干净,而且很容易理解。

于 2013-05-17T20:08:48.637 回答