考虑一个无符号int值的(排序的)向量。
std::vector<unsigned int> data = {1234,1254,1264,1265,1267,1268,1271,1819,1832,1856,
1867,1892,3210,3214,3256,3289};
假设每个无符号的int为4个字节,则由16个元素组成的向量将至少占用64个字节的RAM。
我认为可以通过按公用基数对这些值进行分组来减少内存使用量。例如考虑一种数据表示形式
data =
{
{12..
..34, ..54, ..64, ..65, ..67, ..68, ..71
},
{18..
..19, ..32, ..56, ..67, ..92
}
{32..
..10, ..14, ..56, ..89
}
};
在上面的示例中,我将值按100的块进行分组。按2 ^ 8 = 256或2 ^ 16 = 65536的分组对数据进行分组将更合乎逻辑。
是否有一种数据类型(在std ::或boost ::或其他类型中)可以为我做这种窍门,还是我必须为此编写自己的容器类型?听起来像是一个潜在的好主意吗?
答案 0 :(得分:1)
在非常受限的情况下,对于特定输入,这是一个可行的想法。 las std ::不提供该结构。您的特定建议可以像树一样合理地实现。
当心一般的基数感知顺序,因为它们通常使用大列表,因此比常规向量使用更多的内存。