Я не могу найти, как именно Excel хранит ячейки с SharedStringTable
элементами в памяти во время выполнения, но сохранение их в качестве индекса элемента в SharedStringTable
требует только одной дополнительной разыменования для доступа их, предполагая, что элементы хранятся в виде массива. Так что я думаю, что это так. Это самый простой способ, и единственный способ сделать это быстрее - иметь уже отсортированные по элементам представления SharedStringTable
. В этом случае сортировка по индексу эквивалентна сортировке по значению. Такой подход, однако, делает операцию вставки дорогостоящей, так как при вставке новой строки в середину таблицы все индексы больше, чем следует увеличивать, а количество таких ячеек в документе может быть очень большим, вплоть до всех ячейки, относящиеся к SharedStringTable
.
Если ячейки содержат индексы, такие же, как в файле, то здесь можно отсортировать ячейки, представленные вектором columnValue
, на основе строк, на которые они указывают, хранящихся в * Вектор 1010 * (в 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
медленно и помогает кэширование элементов в словаре.