gpt4 book ai didi

c++ - 通过 hash_map 调用函数指针是否比 C++ 中的多个 if/else if/else 语句更有效或更好?

转载 作者:太空宇宙 更新时间:2023-11-04 15:05:22 25 4
gpt4 key购买 nike

我本来打算做一个 switch 语句,但后来意识到它不能针对 string 完成。所以我写了一个 if/else if/else 语句然后意识到我不应该让我的函数这么长。所以我打算将函数调用放在每个级联 if block 的主体内,并认为使用 hash_map/unordered_map 可能更好到一组函数指针。

我的问题是:

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

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

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

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

最佳答案

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

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

关于c++ - 通过 hash_map<string, fnPtr> 调用函数指针是否比 C++ 中的多个 if/else if/else 语句更有效或更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16616919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com