【发布时间】:2013-05-17 19:58:57
【问题描述】:
我打算发表switch 声明,但后来意识到不能针对string 进行声明。于是我又写了一个if/else if/else 声明,然后意识到我不应该把我的函数做这么久。因此,我打算将函数调用放在每个级联 if 块的主体中,并认为最好将 hash_map/unordered_map 用于一组函数指针。
我的问题是:
-
使用 hash_map 指向要使用的函数并以这种方式调用它会更有效吗?
IIRC,地图应该接近 O(1),作为级联 if 需要一直测试直到找到匹配项,因此是 O(N)。但是,使用带有字符串键的映射,O(1) 在什么时候(多少 N)超过了 O(N) 的性质?
-
编码风格更好吗?
由于我正在减少将特定代码封装为特定于需要完成的操作的较小函数,我认为这是正确的。我知道这更像是一个意见问题,但作为一个社区,我认为这仍然是一个有效的问题。
【问题讨论】:
-
在 map 中的检索是 O(log(n)),而不是 O(1)(也许您正在考虑使用 hashmap?)。参见例如cplusplus.com/reference/map/map/find
-
哦,你是对的。更新问题
-
你可以使用基类和虚函数来消除对
对的需要吗? -
@ThomasMatthews:不,它基于解析的数据。这是解析识别点。
标签: c++ optimization coding-style