多维数组 - 用于在C++中存储非常大的 2D 数据的数据结构
multidimensional array - Data structure for storing very large 2D data in C++
我需要处理最多 1 亿行和 30 列的数据表 (2D)。表元素仅包含 0、1 和短划线 (-)。该表以文本文件的形式提供给我。我必须将这些数据存储到一些数据结构中,并执行排序表、删除行、比较元素(在不同的行和列中)等操作。
目前我正在为此使用 2D 矢量。我尝试使用整数向量和位向量。两者都适用于 10mil 行和 25 列,但都不适用于上述最大限制(我有一个糟糕的分配)。
我假设这是因为向量需要连续内存。对此的正确数据结构是什么?时间也是我的考虑因素之一,并且也希望访问时间较短。另外,如果向量实际上是正确的数据结构,我可以使用更好的实现来使其工作吗?我必须坚持C++,不能使用数据库和其他东西。
多谢!
查看 Nstate。
它是任意基数的打包数组库(因此三态符合条件)。
http://nstate.hostilefork.com
免责声明:我写了 nstate。
你可以考虑一个boost::tribool
数组
看
- http://www.boost.org/doc/libs/1_55_0/doc/html/tribool.html
- 针对空间优化摩擦波阵列
您还可以考虑在std::bitset
上使用包装器,以便每个摩擦函数在位集中有 2 位。
尺寸N
的tribool
需要尺寸bitset
2*N
映射:
tribool(i) maps to bitset(2*i) and bitset(2*i+1)
if tribool(i) == indeterminate, then bitset(2*i) = false
if tribool(i) == true, then bitset(2*i) = true, bitset(2*i) = true
if tribool(i) == false, then bitset(2*i) = true, bitset(2*i) = false
C++伪代码:
template<size_t N>
class PackedTribool {
public:
??? test( i ) {
if( bits_[ 2 * i ] == false ) {
return indeterminate;
}
else {
return( bits_[ 2 * i + i ];
}
}
private:
std::bitset<2*N> bits_; // note: size is doubled
};
相关文章:
- 2D数组来自文本输入,中间有空格
- 将值指定给向量(2D)的向量中的某个位置
- 如何使用用户输入在C++中正确填充2D数组
- 如何在C++中检查2D数组中负值的输入验证
- OpenGL大的3D纹理(>2GB)非常慢
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 在 2D 向量中使用第三个 [ ] 有什么意义?
- 四边形的 2D 旋转
- 打印第二列时的2d字符矢量打印空间
- 为什么std::互斥需要很长的、非常不规则的时间来共享
- 如何将以逗号和空格分隔的整数读取到 2D 数组中?
- 如何在C++函数中声明静态 2D 数组?
- 我是 C++ 的初学者,我想知道如何在 2D 矢量中获取重复值
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- G++ C++17 类模板参数推导在非常特殊的情况下不起作用
- 使用浮点数和双精度数的非常小数字的数学
- 绘制非常大的 2D 图形时出现问题
- DirectX 11 - 如何创建非常简单的 2D 纹理
- 多维数组 - 用于在C++中存储非常大的 2D 数据的数据结构