Эффективность stl :: map of stl :: sets

Я считаю, что я хотел бы использовать boost :: icl :: interval_map для решения проблемы (описано Вот, Я опубликую полный ответ, если интервал_карты в конечном счете сработают.)

Я хочу использовать interval_map<unsigned long long, set<foo*>>, но в документации для boost :: icl упоминается, что существуют потенциальные проблемы с эффективностью (ниже от).

Мы представляем интервал_карты, используя карту интервалов наборов строк, из-за ее дидактических преимуществ. Пример партии используется, чтобы дать немедленный доступ к основным идеям карт интервалов и агрегировать на перекрытии. Для реальных приложений интервал_карта наборов не обязательно рекомендуется. Он имеет те же проблемы с эффективностью, что и std :: map для std :: sets. Тем не менее, существует большая область использования interval_maps с числовыми и другими эффективными типами данных для связанных значений.

Каковы проблемы эффективности с std :: map of std :: sets?
а также Как я могу избежать их?

0

Решение

И то и другое std::map<K, V> а также std::set<V> являются узлами на основе контейнеров, связанных указателями. Обход их имеет хорошие гарантии сложности (то есть каждая отдельная операция не более O (log n)), но на самом деле вам нужны достаточно большие контейнеры для сложности по сравнению с, например, std::vector<std::pair<K, V>> особенно когда K а также V являются фундаментальными типами. Основная проблема производительности с контейнерами на основе узлов заключается в том, что они более или менее случайным образом размещаются в памяти, в то время как современные процессоры предпочитают получать доступ к данным, кластеризованным в той или иной форме.

Конечно, как обычно, вам нужно измерить время, полученное между различными реализациями на довольно реалистичных наборах данных, чтобы определить, какая структура данных обеспечивает наилучшую производительность.

2

Другие решения

Других решений пока нет …