Главная фишка: элементы после вставки практически не двигаются в памяти. Поэтому указатели и итераторы на существующие объекты остаются валидными даже после вставок и удаления других элементов.
Как это работает:
- данные хранятся не в одном массиве, а в нескольких блоках
- удалённые элементы не сдвигают остальные
- свободные места потом переиспользуются
- специальный skipfield позволяет быстро пропускать удалённые слоты
В результате:
- вставка и удаление - амортизированно O(1)
- указатели остаются стабильными
- локальность памяти заметно лучше, чем у
std::list- но случайного доступа через
[] нет- порядок вставки не гарантируется
-
Особенно полезно для игровых движков, пулов соединений, систем частиц и других случаев, где объекты постоянно создаются и удаляются, а другие части программы хранят указатели на них.
Коротко:
std::hive - не более быстрый vector, а скорее гораздо более cache-friendly альтернатива list. https://sandordargo.com/blog/2026/09/02/cpp26-hive