Форум программистов, компьютерный форум CyberForum.ru

Как создать приоритетную очередь? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Переворот линейного списка http://www.cyberforum.ru/cpp-beginners/thread178994.html
Построить линейный список из нескольких динамических переменных, содержащих вводимые целые числа. Если введенный список упорядочен по возрастанию, то оставить его без изменения, иначе перестроить элементы этого списка в обратном порядке. Вывести полученный список. #include <stdio.h> #include <malloc.h> #include <conio.h> #include <dos.h> struct spis { float value;
C++ c++ меню как мне создать меню в c++ можетедать млаенький пример? спасибо http://www.cyberforum.ru/cpp-beginners/thread178989.html
C++ Программа чайнворд
Есть множество слов, упорядочить их так, чтобы буква, на которую слово заканчивается, начинало следующее
C++ Три одинаковых подстроки
Помогите вот с такой вот задачей: Пользователь вводит строку максимум из 100 символов, программа выводит ДА или НЕТ, в зависиомти от следующего условия: Строка не должна содержать три или больше одинаковых подстрок подряд, aaa(три a подряд) - не подходит, abababab(несколько ab подряд) - не подходит, aabcabcabca(три abc подряд) - не подходит Никак не получается это реализовать:( нужна только...
C++ Украинские шрифты в консоле http://www.cyberforum.ru/cpp-beginners/thread178965.html
Тема аналог Русские шрифты в консоле Токо что делать если мне надо Укр. setlocale (LC_ALL, ""); решает проблему с Рус. шрифтом но вот Укр. он виводит не весь буквы і ї є заменяет на каракули пишу на VS 2010 зарание благодарен.
C++ Дан массив числовых элементов Дан массив числовых элементов. Найти позиции всех максимальных чисел. Помогите плз решить ) подробнее

Показать сообщение отдельно
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
20.10.2010, 19:00     Как создать приоритетную очередь?
Цитата Сообщение от xuston2010 Посмотреть сообщение
А точнее можете подсказать, в теории я понимаю, а вот с кодом проблемы
Ну вообще реализация приоритетной очереди есть в STL. Можете посмотреть исходники, если хотите написать собственный вариант, взять за основу.
Для вашей задачи вполне можно использовать.

Примерно так. Делаете класс "задача", у которая в данных имеется поле "приоритет" - его то и используете в качестве сортирующего параметра.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class event
{
    public:
        event(int event_priority, const std::string &event_name) : priority(event_priority), name(event_name) {
        }
        
        void run() {
            std::cout << "event " << name << "(" << priority << ")" << " running" << std::endl;
        }
 
        int get_priority() const {
            return priority;
        }
 
    private:
        int priority;
        std::string name;
};
Далее создаете функтор-компаратор примерно такого вида
C++
1
2
3
4
5
6
7
class event_comparison
{
    public:
        bool operator() (const event &lhs, const event &rhs) const {
            return (lhs.get_priority() < rhs.get_priority());
        }
};
создаете и используете приоритетную очередь:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{
    std::priority_queue<event, std::vector<event>, event_comparison> event_queue;
    
    event_queue.push(event(10, "event 1"));
    event_queue.push(event(4, "event 2"));
    event_queue.push(event(7, "event 3"));
    event_queue.push(event(2, "event 4"));
 
    while(!event_queue.empty()) {
        event ev = event_queue.top();
        event_queue.pop();
        
        ev.run();
    }
}
Как видно, если запустить пример, то получится следующий результат:
Код
event event 1(10) running
event event 3(7) running
event event 2(4) running
event event 4(2) running
Задачи выполняются в порядке убывания по приоритету.
 
Текущее время: 03:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru