如何将我的 class(with stl container) 转储出来,让它下次加载更快?
How to dump my class(with stl container) out, make it fast to load next time?
我有一个大容器class来读取文件和保存一些数据,它看起来像:
class MyData {
public:
void Load(const std::vector<string>& file_paths) { // this is a slow funuction, need to read a lot of files.
for (const auto & f : file_paths) {
// read file, and save the data in to stl containers
}
}
private:
std::vector<double> a;
std::unordered_map<string, double>b; // there may be more containers.
}
每当我需要使用这个 class 时,我需要:
MyData mdata;
std::vector<std::string> fs; // thousands of files need to read
mdata.Load(fs); // very slow
但是Mdata不经常更新,我可以把它转储出来,然后使用转储的class,让它更快吗?
例如:
MyData load_dump(const std::string& dump_file_path) {
// help needed
}
const MyData& mdata = load_dump("dump.bin"); // load the dumped file, to speed up
你能帮忙吗?
当然可以。对于 vector<double>
,您可以简单地使用 ofstream::write(a.data(), a.size())
。对于地图之类的东西,您需要进行某种序列化,因为它们的内部表示更为复杂。您可以使用 http://www.boost.org/libs/serialization/ 作为某种通用的解决方案,或者您可以自己编写代码。
我有一个大容器class来读取文件和保存一些数据,它看起来像:
class MyData {
public:
void Load(const std::vector<string>& file_paths) { // this is a slow funuction, need to read a lot of files.
for (const auto & f : file_paths) {
// read file, and save the data in to stl containers
}
}
private:
std::vector<double> a;
std::unordered_map<string, double>b; // there may be more containers.
}
每当我需要使用这个 class 时,我需要:
MyData mdata;
std::vector<std::string> fs; // thousands of files need to read
mdata.Load(fs); // very slow
但是Mdata不经常更新,我可以把它转储出来,然后使用转储的class,让它更快吗? 例如:
MyData load_dump(const std::string& dump_file_path) {
// help needed
}
const MyData& mdata = load_dump("dump.bin"); // load the dumped file, to speed up
你能帮忙吗?
当然可以。对于 vector<double>
,您可以简单地使用 ofstream::write(a.data(), a.size())
。对于地图之类的东西,您需要进行某种序列化,因为它们的内部表示更为复杂。您可以使用 http://www.boost.org/libs/serialization/ 作为某种通用的解决方案,或者您可以自己编写代码。