我在C中编写一个简单的解析器,使用字符串’triggers’到’handler’函数指针的映射,我的问题是实现生成和访问映射的最“静态”和有效的方法是什么?
我首先考虑了一种方法,例如Parser :: add_handler,它会将触发器/处理程序添加到解析器的映射中,但据我所知,每次运行程序时都需要执行此操作,而数据在编译时是已知的. (虽然从好的方面来说,它们只需要执行一次,而不是每个实例化的Parser.)
然后我考虑使用虚拟方法,例如Parser中的Parser :: get_handlers将在派生类中实现,以返回该解析器的处理程序映射.这似乎是一个更好的封装解决方案,虽然它需要为每个创建的解析器实例调用虚函数,至少调用解析器的地图生成函数.
使用后一种方法目前似乎更可取,但它仍然会在每次执行时动态生成地图,是否可以避免这种情况?
最佳答案 如果您不想动态构建映射,可以使用带有std :: lower_bound的已排序静态数组在O(log n)时间内搜索它.
如果您有一个好的哈希映射实现,您可能会发现填充它的开销小于运行时的性能增益,具体取决于您需要执行多少次查找.