gpt4 book ai didi

c++ - 有没有办法以 vector 形式访问内存映射?

转载 作者:行者123 更新时间:2023-12-02 10:33:14 25 4
gpt4 key购买 nike

TL; DR 我在内存映射的文件中有大量术语。我可以像访问内存中的 vector 一样访问这些术语吗?例如,std::string term = terms[1];
文件

我有一个大的二进制文件(由我创建),其中包含数百万个术语,如下所示:

applebarnhouseskytrain...

header 是一个UInt64 int,用于指定术语数,其后是相同数量的UInt64 int,每个UInt64用于为每个术语指定字节偏移量(从零开始)。上一个示例的 header 看起来像这样(尽管是二进制形式):
5 0 5 9 14 17

因此,二进制文件总共看起来像 this我愿意修改此数据的存储方式,如果有帮助的话。

内存图

我正在使用 mio库来内存映射此文件。我可以遍历整个文件,或访问任何单个字节。例如。,
mio::mmap_source in;
in.map("index", error);
for (auto& b : in) {
std::cout<<b;
}
std::cout << in[3];

我将 header 中的偏移量读入内存中的 vector 中:
std::vector<int64_t> offsets;

访问术语

当前,如果要访问第二个术语,则首先要获取 offset[1]术语的偏移量和后续术语 offset[1+1]的偏移量。然后,我将使用刚刚获得的偏移量遍历 std::string term;来创建 in[]

问题
  • 是否可以定义一些数据类型,以便我可以像在 vector /集合/映射中一样访问每个术语,而无需将实际术语加载到内存中?例如std::string term = terms[1]; //assigns "barn" to term
  • 我要对所有这一切做错吗?是否有更快,更有效的方式从文件中获取术语?我已经考虑了很长时间了,我觉得我可能会错过其他明显的选择。
  • 最佳答案

    Is there some datatype I can define so that I can access each term as if it were in an vector/set/map without loading actual terms into memory?



    没有。

    使用自定义分配器,您可以使标准容器使用映射的内存进行存储,但不能使用容器拥有所有权之前的内存中的数据。

    为此,您必须创建一个自定义类。

    关于c++ - 有没有办法以 vector 形式访问内存映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61459931/

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