Часть моего приложения включает представляющие аудио формы сигнала. Пользователь сможет к увеличению / из формы сигнала. Начиная в полностью уменьшенном, я только хочу выбрать аудио в необходимых внутренностях для рисования формы сигнала в данном разрешении. Затем когда они увеличивают масштаб, асинхронно передискретизируют "упускающую суть" и обеспечивают более ясную форму сигнала. (Думайте Google Maps.) я не уверен лучшая структура данных для использования в спокойном мире. Идеально, я хотел бы сохранить образцы данных, отсортированные по времени, но со способностью к временной замене указывает по мере необходимости.
Так, например, точки данных могли бы первоначально быть похожими:
data[0 ms] = 10
data[10 ms] = 32
data[20 ms] = 21
...
Но когда они увеличивают масштаб, я понял бы больше мыслей по мере необходимости, возможно:
data[0 ms] = 10
data[2 ms] = 11
data[4 ms] = 18
data[6 ms] = 30
data[10 ms] = 32
data[20 ms] = 21
...
Обратите внимание, что значения в скобках являются справочными значениями (миллисекунды), не индексы массива.
Я должен смочь эффективно запросить для диапазона ("все точки между 10 и 30 миллисекундами") и несколько эффективно вставить новые точки.
В.Net I, возможно, использовал a SortedList<int, int>
. Каков был бы лучший класс для использования в QT? Или я должен использовать контейнер STL?
QMap автоматически сортируется, поэтому при повторении по нему создается отсортированный (по возрастанию) список.
Он также предоставляет Qmap :: upperBound () и QMap :: lowerBound (), которые вы можете использовать для своей функциональности поиска диапазона.
Какой класс лучше всего использовать в Qt? Или лучше использовать контейнер STL?
Вы можете использовать std::map. Я рекомендую использовать контейнеры STL для бизнес-логики, а контейнеры Qt только тогда, когда это необходимо для привязки данных к вашему графическому интерфейсу.
EDIT: изменил std::set на std::map
Я бы очень советовал вам заглянуть сюда: Generic Containers
Вы найдете хороший обзор различных классов контейнеров в Qt... Я бы также рекомендовал вам использовать один из них! Мне кажется, вы могли бы использовать QMap!
Надеюсь, это немного поможет!