c++ - 高效生成静态 map

标签 c++

我正在用 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/

相关文章:

c++ - C++ 在编译时是否支持全局 header ?

c++ - 如何从 main ( ) 调用线程成员函数

c++ - 专门化模板成员函数?

java - 编译器组件的良好源代码

c++ - 使用 boost::asio stackless 协程通过 HTTP 下载多个文件

c++ - 如何在 C++ 14 的类中启动线程?

c++ - 使用地址作为标量值

c++ - 如果用户输入的输入大于 char 数组,cin.getline 会跳过输入提醒

c++ - 如果我知道只使用现有元素,我可以在数组开头之前传递一个指针吗?

c++ - C++中的对象赋值