我有一个可以按行和列访问的表,其中这两个表不是整数。然而,它们将是独一无二的并且来自同一组。该表需要扩展,但总是从最后开始。从中间移除可能是必要的,但不是优先考虑的事项。
我目前正在测试两种方法:
map<Key, int> headers;
vector<vector<Value> > table;
或者:
map<Key, map<Key, Value> > table;
哪种更合适?我也愿意接受新的建议。
答案 0 :(得分:1)
这一切都取决于将如何使用这种结构:表格的密集程度,各种操作的效率,有效载荷类型(Value
)的大小等等。 / p>
您的第一种方法(向量矢量,带有转换索引的映射)是一种密集表示:每个值都显式存储在表中。如果向量增长L倍,那么数据本身的总分配过量可以达到L ^ 2。例如,如果L == 1.25,您可能会超过50%的超额存储空间;如果sizeof(Value)
很大或者你的桌子很大,那可能会让人望而却步。扩展表可能偶尔也很昂贵(当必须重新分配向量时)。
你的第二种方法(地图图)可能很稀疏。但是,如果访问所有表(行,列)对,它将变得密集。此外,地图的簿记信息比矢量略大。因此,对于小Value
大小,向量方法的向量可能更节省空间。如果您的大多数表都将填充“默认”值,那么您可以通过区分对表的读取和写入访问来改进:读取值可以执行“查找”并返回合成的默认值(如果有明显的条目)被发现了。