Я уже не помню точных деталей. Кажется, там было что-то вроде индекса в виде unordered_map<string_view, size_t>
который указывал внутрь контейнера с данными OurSpecialContainer<struct{ string, ... }>
. OurSpecialContainer
при вставке мог вызвать перемещение элементов. Вся работа по поддержанию индекса и данных была в одной функции, но про ресайз забыли. На самом деле OurSpecialContainer
ближе к (hash) map, чем к вектору, но поверх него строился второй индекс.
Выход view класса из контекста функции требует строк пяти комментариев зачем это вообще надо и проверок, что используются неперемещающие контейнеры, коих в стд примерно 5. В идеале вообще нужно делать отдельный строковый класс и подавлять move конструкторы, потому что возможность синтезировать такие view дописывает невыражаемое в языке условие на деструктор