💡 В C++23 появились долгожданные «плоские» контейнеры:
flat_set, flat_map, flat_multiset и flat_multimap — адаптеры, которые используют обычные векторы вместо деревьев.❗️ Ключевые особенности:
• поиск O(log N) как в обычном set, но быстрее на практике
• итерация в разы быстрее классических контейнеров
• потребление памяти меньше на сотни процентов
• вставка и удаление катастрофически медленные O(N)
Основная идея — хранить данные в отсортированном векторе и использовать бинарный поиск.
std::flat_map даже хранит ключи и значения в отдельных контейнерах для лучшей производительности.Идеально подходят для сценариев «заполнил один раз — читаю много раз». Особенно эффективны при работе с миллионами элементов и компактными ключами.
⚠️ Не используйте их, если планируете частые вставки и удаления — в таких случаях классические
std::set/map или unordered-контейнеры будут эффективнее.🔜Статья
Библиотека C/C++ разработчика
