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