我无法找到Excel SharedStringTable
在运行时如何精确地将带有元素的单元格存储在内存中,但是SharedStringTable
假设将元素存储为数组,则将它们存储为项目的索引仅需要一个额外的解除引用即可访问它们。因此,我的猜测是这是完成的方式。那是最简单的方法,并且使其更快的唯一方法是使运行时表示形式SharedStringTable
已经按元素排序。在这种情况下,按索引排序等同于按值排序。但是,这种方法使插入操作成本很高,因为将新字符串插入表的中间时,所有大于其应增加的索引都会增加,并且文档中此类单元格的数量可能非常大,直到所有指的细胞SharedStringTable
。
如果单元格包含的索引与文件中的索引相同,则以下是如何根据columnValue
向量所指向的字符串对向量所表示的单元格进行排序的方式sharedStrings
(在C ++中,因为您说的没有区别),成本为2每个比较操作的额外取消引用:
// sort indexes from columnValue based on comparing values in sharedStrings
sort(columnValue.begin(), columnValue.end(),
[&sharedStrings](size_t i1, size_t i2){return sharedStrings[i1] < sharedStrings[i2];});
它不在OP中,但是反向SharedStringTable
查找操作很慢,并且将元素缓存到字典中很有帮助。