我需要处理最多1亿行和30列的数据表(2D)。表元素仅包含0,1和短划线( - )。该表在文本文件中提供给我。我必须将这些数据存储到某些数据结构中,并执行排序表,删除行,比较元素(不同行和列)等操作。
目前我正在使用2D矢量。我尝试使用整数向量和位向量。两者都适用于10mil行和25列但不适用于上述最大限制(我的分配错误)。
我假设这是因为向量需要连续的内存。什么是正确的数据结构?时间也是我的考虑因素之一,也希望访问时间较短。另外,如果向量实际上是正确的数据结构,那么我可以使用更好的实现来使其工作吗?我必须坚持使用C ++,不能使用数据库和东西。
非常感谢!
答案 0 :(得分:6)
答案 1 :(得分:4)
您可以考虑boost::tribool
见
您还可以考虑使用std::bitset
上的包装器,以便每个tribool在bitset中有2位。
tribool
的 N
需要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 ++ ish伪代码:
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
};