Какой класс контейнера Qt использовать для отсортированного списка? - PullRequest
10 голосов
/ 12 апреля 2010

Часть моего приложения включает рендеринг звуковых сигналов. Пользователь сможет увеличить / уменьшить масштаб сигнала. Начиная с полностью уменьшенного масштаба, я хочу только сэмплировать звук на необходимых внутренних элементах, чтобы нарисовать сигнал с заданным разрешением. Затем, когда они увеличивают изображение, асинхронно повторно выбирают «отсутствующие точки» и обеспечивают более четкую форму сигнала. (Подумайте, Google Maps.) Я не уверен, лучшая структура данных для использования в мире Qt. В идеале я хотел бы хранить выборки данных, отсортированные по времени, но с возможностью заполнения точек по мере необходимости.

Так, например, точки данных могут изначально выглядеть так:

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 я мог бы использовать SortedList<int, int>. Какой класс лучше всего использовать в Qt? Или я должен использовать контейнер STL?

Ответы [ 3 ]

10 голосов
/ 12 апреля 2010

QMap автоматически сортируется, поэтому итерация по нему приведет к отсортированному (возрастающему) списку.

Он также предоставляет Qmap :: upperBound () и QMap :: lowerBound (), которые вы можете использовать для поиска диапазона.

http://doc.qt.io/qt-5/qmap.html

3 голосов
/ 12 апреля 2010

Я настоятельно советую вам посмотреть здесь: Универсальные контейнеры

В Qt вы найдете хорошую сводку различных контейнерных классов ... Я бы также рекомендовал вам использовать один из них! Похоже, вы могли бы использовать QMap!

Надеюсь, это немного поможет!

0 голосов
/ 12 апреля 2010

Какой класс лучше использовать в Qt? Или я должен использовать контейнер STL?

Вы можете использовать std :: map. Я рекомендую использовать контейнеры STL для бизнес-логики и контейнеры Qt только тогда, когда это необходимо для привязки данных к вашему графическому интерфейсу.

РЕДАКТИРОВАТЬ: изменен std :: set to std :: map

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...