STL контейнер для pop () по приоритету? - PullRequest
1 голос
/ 25 апреля 2010

Я пишу пул потоков для Qt, поскольку QRunnable не обрабатывает циклы событий в новых потоках.

Не слишком знаком с STL, каков наилучший способ сделать pop () чем-нибудь по приоритету? Приоритет, вероятно, должен быть свойством MyRunnable imo, но я всегда могу передать эту информацию в контейнер STL при добавлении runnable в очередь.

Ответы [ 3 ]

4 голосов
/ 25 апреля 2010

По pop() Я предполагаю, что вам нужна какая-то структура стека. Я не уверен, как этого добиться с помощью семантики стека, но приоритетные проблемы можно решить просто с помощью std::priority_queue.

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

Стандартная библиотека имеет std::priority_queue, что, как следует из ее названия, является реализацией общей очереди приоритетов.

2 голосов
/ 25 апреля 2010

Не знаком с QT, но, как говорят другие, используйте priority_queue.

Вам также понадобится функтор, чтобы структура могла получить доступ к информации о приоритете и указать порядок сортировки.

struct is_higher_priority {
    bool operator()( MyRunnable const &l, MyRunnable const &b )
        { return l.priority > r.priority; }
};

std::priority_queue< MyRunnable, std::deque<MyRunnable>, is_higher_priority > q;

...

q.push( task_1 );
q.push( task_2 );
q.push( task_3 );

MyRunnable &highest = q.top();
highest.run();
q.pop();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...