例如,像 map 这样包含 20000 个条目的对象。在运行时不调用insert方法,在编译时初始化它的元素,把这个映射写入二进制文件,就像一个全局的int数组。
最佳答案
编译时间:无
不使用运行时 map::insert()
:是
使用 C++11,您可以声明和初始化一个全局对象。
#include<map>
std::map<int, int> m = {{0,0}, {1,1}, {2,2}};
int main () {}
在某些全局对象构造函数中,您可以将此 map
写入文件。
struct Global {
Global (const char* fileName) {
std::ofstream file(fileName);
for(auto pair : m)
// insert operation
}
}
g_Initialize("xyz.txt");
因此,在 main()
运行之前,您已准备就绪。
执行此操作时,请注意 static initialization order fiasco .
更新:std::map
只是一个方便的示例。这里的关键是使用std::initializer_list
.您也可以使用自定义类。
关于c++ - 是否有可能实现一个可以容纳 POD 元素并在编译时初始化分配的静态存储的容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27479124/