例如,像map这样的对象包含20000个条目.在运行时不调用insert方法,在编译时初始化其元素,并将此映射写入二进制文件,就像全局int数组一样.
编译时间:否
不使用运行时map::insert():是的
使用C++ 11,您可以声明并初始化全局对象.
#include<map>
std::map<int, int> m = {{0,0}, {1,1}, {2,2}};
int main () {}
Run Code Online (Sandbox Code Playgroud)
在一些全局对象构造函数中,您可以将其写入map文件.
struct Global {
Global (const char* fileName) {
std::ofstream file(fileName);
for(auto pair : m)
// insert operation
}
}
g_Initialize("xyz.txt");
Run Code Online (Sandbox Code Playgroud)
因此,在main()运行之前你已准备好了.
执行此操作时,请注意静态初始化顺序fiasco.
更新:std::map只是一个方便的例子.这里的关键是使用std::initializer_list.您也可以使用自定义类.