Cache-friendly массив списков
Есть много массивов/векторов, по которым можно быстро итерироваться, т.к. данные расположены близко друг к другу, что способствует кешированию.
Как называется/сделать структуру данных, которая помимо итерации по отдельным логическим массивам может быстро проитерироваться по нескольким сразу? То есть можно быстро проитерироваться по логическому объединению первого и второго массива, с третьего по пятый, всем массивам подряд и т.п..
Если бы все массивы были неизменны, то можно было бы просто расположить их друг за другом последовательно в одном массиве. Но они могут меняться и быть разной длины. Как тогда реализовать это оптимально?
Необходимые операции:
- O(1) в среднем вставка в непроизвольное место произвольного массива (например, вставить в конец 3 массива)
- аналогичное удаление (например, удалить первый/последний элемент 2 массива)
- O(n) cache-friendly итерация по любому массиву длины n
- O(m) cache-friendly итерация по произвольному последовательному набору массивов, где m = n_i + n_i+1 + ... + n_j = сумма размеров этих массивов от i-ого до j-ого.
Вставка/удаление может быть отложенным, т.е. элемент должен/не должен учитываться в 3/4 операции, но на момент вставки/удаления может реально не быть добавленным/удалённым из массивов.
Константный доступ к произвольному элементу произвольного массива не нужен.