方形和对称表的数据类型

时间:2012-03-26 22:02:49

标签: c++ templates collections types

我有一个可以按行和列访问的表,其中这两个表不是整数。然而,它们将是独一无二的并且来自同一组。该表需要扩展,但总是从最后开始。从中间移除可能是必要的,但不是优先考虑的事项。

我目前正在测试两种方法:

map<Key, int> headers;
vector<vector<Value> > table;

或者:

map<Key, map<Key, Value> > table;

哪种更合适?我也愿意接受新的建议。

显示基本用法的示例(虽然两者都过于简单化)是herehere

1 个答案:

答案 0 :(得分:1)

这一切都取决于将如何使用这种结构:表格的密集程度,各种操作的效率,有效载荷类型(Value)的大小等等。 / p>

您的第一种方法(向量矢量,带有转换索引的映射)是一种密集表示:每个值都显式存储在表中。如果向量增长L倍,那么数据本身的总分配过量可以达到L ^ 2。例如,如果L == 1.25,您可能会超过50%的超额存储空间;如果sizeof(Value)很大或者你的桌子很大,那可能会让人望而却步。扩展表可能偶尔也很昂贵(当必须重新分配向量时)。

你的第二种方法(地图图)可能很稀疏。但是,如果访问所有表(行,列)对,它将变得密集。此外,地图的簿记信息比矢量略大。因此,对于小Value大小,向量方法的向量可能更节省空间。如果您的大多数表都将填充“默认”值,那么您可以通过区分对表的读取和写入访问来改进:读取值可以执行“查找”并返回合成的默认值(如果有明显的条目)被发现了。