Задать вопрос
Dyikot
@Dyikot

Какой контейнер выбрать для поиска по ключу для разных размеров?

Недавно наткнулся на видео C++Now 2018 You Can Do Better than std unordered_map. Хотя его целью было создание более быстрой версии стандартного unordered_map, но меня заинтересовали его графики приведенные в начале. В них автор сравнивание различные контейнеры при различном числе элементов.
693ec8c881043025316246.png
693ec87239f7f770503960.png
693ec87bea672711532996.png
И исходя из них я могу сделать примерный вывод лучше поиск по целочисленному ключу:
1) Линейный поиск в vector (до 20 элементов)
2) Бинарный поиск в map/flat_map ( с 20 до 300 элементов)
3) Поиск использую hash функцию в unordered_map (с 300 элементов)
Могу предположить что если тип ключа более сложный то unordered_map начнет доминировать раньше. Сейчас я использую unordered_map, но для контейнеров которые будут изменятся редко, небольшого размера и использующие простой ключ - size_t хотелось бы оптимизировать скорость и память.
Насколько эти графики выглядят правдимыми? Просто после этого я решил протестировать контейнеры для небольших размеров - vector + линеный поиск и unordered_map для 10, 25 и 50 элементов. И у меня получается unordered_map во всех случаех лучше. Думаю может я что-то не правильно протестировал?
Release
size   vector	unordered_map
10	10ns	6ns
25	13ns	6ns
50	19ns	6ns


Что по вашему опыту лучше для небольших контейнеров и простым типом ключа?
  • Вопрос задан
  • 158 просмотров
Подписаться 2 Простой 6 комментариев
Помогут разобраться в теме Все курсы
  • Нетология
    Разработчик на C++: Профессия + специализация + нейросети
    12 месяцев
    Далее
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Skillbox
    Разработчик на C++
    7 месяцев
    Далее
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы