假设您需要处理存储在向量中的大量元素(1 bilion +),并且您希望将所有这些元素分成几组。具体而言,我们希望做到以下几点:
std::vector<std::vector<int>> groups(100, std::vector<int>);
for (size_t i = 0; i < 1000000000; ++i) {
groups[i % 100].push_back(big_vector.push_back(i));
}
big_vector.resize(0);
big_vector.shrink_to_fit();
但是,由于big_vector
非常庞大,因此将内存中的数据复制起来非常不方便。然而,这可能无法避免,因为向量连续的内存分配和无法在不复制整个数据的情况下自行调整大小(如果我错了,请纠正我)。
那么问题是,用于存储我们的大数据的其他结构是什么?我想过编写自定义容器,它会在std::vector<std::array<SIZE>>
内部存储数据,其中SIZE
足够大,不会有太多的块,但不会导致重复的内存开销问题。是否有更多标准的ish(boost-ish)方式,或者写自定义容器是我最好的选择?
为了进一步指明我对容器的期望 - 如果它具有类似于矢量的接口(快速随机访问等)将会很好。但是,如果有必要的话,我可能会在没有随机访问的情况下完成,只能推送和阅读。无论如何,这必须非常快。