gpt4 book ai didi

c++ - 如何通过 C++ boost::serialization 对 std::map 进行部分反序列化

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:31:50 37 4
gpt4 key购买 nike

我有一个高度格式化的文件,其中包含我经常使用的大量数据,因此我将其存储到 std::map 中并使用 boost::serialization 库对其进行序列化。序列化代码如下所示:

boost::iostreams::filtering_ostream ofs {};
ofs.push (boost::iostreams::zlib_compressor ());
ofs.push (boost::iostreams::file_sink (file_name));
boost::archive::binary_oarchive oa {ofs};
oa << my_map;

但每次我可能只需要 map 的一部分,比如某个键值对。所以我想知道我是否可以从文件中部分反序列化 map 并只检索我指定的对?这样我就不必将整个文件读入内存。

最佳答案

您可以为您的数据建立索引,尽管在存在压缩的情况下使用起来有点困难。如果你的数据文件是未压缩的,并且说每条记录都在一行上,那么你可以创建一个索引,在其中存储固定宽度记录中每一行的连续偏移,比如无符号的 64 位数字.

要找到第 5112 行,您需要打开索引,查找 5112 * 8,然后读取两个 uint64_t,比如 ab。然后你打开你的数据文件,寻找a并读取b - a字节,这是你的记录。

如果数据被压缩,你必须查看你的压缩库,看看它是否允许你只部分解压缩包含字节 [a, b) 的文件区域.

关于c++ - 如何通过 C++ boost::serialization 对 std::map 进行部分反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11171484/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com