我本来打算做一个 switch
语句,但后来意识到它不能针对 string
完成。所以我写了一个 if
/else if
/else
语句然后意识到我不应该让我的函数这么长。所以我打算将函数调用放在每个级联 if
block 的主体内,并认为使用 hash_map
/unordered_map
可能更好到一组函数指针。
我的问题是:
使用 hash_map 指向要使用的函数并以这种方式调用它会更有效吗?
IIRC,映射应该接近于 O(1),其中作为级联 if 需要一直向下测试直到找到匹配项,因此为 O(N)。然而,在什么时候(什么 N)O(1) 超过了使用带有字符串键的映射的 O(N) 性质?
它是更好的编码风格吗?
由于我正在减少将特定代码封装到更小的函数中,这些函数特定于需要完成的操作,所以我认为这是正确的。我知道这更像是一个意见问题,但作为一个社区,我认为这仍然是一个有效的问题。
最佳答案
取决于很多因素 - 您的表有多大,分支预测器中缓存未命中对性能的影响有多严重,您可以首先优化最常见的情况,哈希函数的强度有多大是,这些哈希值是否被缓存,你得到了多少次冲突以及你如何重新映射这些冲突。它往往是哈希值,但在某些情况下可能不是。
map 更干净了。它更容易理解,并且您不会让某人决定在 if 语句的 15 个分支中的 1 个中加入特殊情况逻辑,然后在调试和维护中丢失。
关于c++ - 通过 hash_map<string, fnPtr> 调用函数指针是否比 C++ 中的多个 if/else if/else 语句更有效或更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16616919/