Как бы я выскочил и нажал с этой приоритетной очереди? - PullRequest
0 голосов
/ 11 ноября 2011

Я пытаюсь использовать push и pop с заданиями из приоритетной очереди. Как бы я это сделал? Мне интересно, как это реализовать?

class Job
    {
    public:
        int job_id;
        string job_description;
        int n_procs;    
        int n_ticks;


        Job(int job_id, string job_description, int n_procs, int n_ticks);
        Job(void);
        ~Job(void);
    };



    typedef vector<Job> Jobs;
    typedef priority_queue<Job, Jobs, less<Job>> JobQueue;

Ответы [ 3 ]

1 голос
/ 11 ноября 2011

Класс очереди приоритета предоставляет базовые операции для доступа к элементам очереди:

  • void std::priority_queue::push(const T &): помещает данный объект в очередь приоритетов.
  • const T &std::priority_queue::top() const: возвращает «верхний» элемент.
  • void std::priority_queue::pop();: удаляет «верхний» элемент.

Просто замените Job на T.

Кстати:

Я не перегружен оператором <.Я думаю, что меньше всего делает его приоритетной очередью в порядке убывания </p>

И как он узнает, что такое "порядок убывания", не зная, как их сравнить?Все, что std::less делает, это вызывает то, что operator< вы определили.Если вы не определили operator<, то std::less не сможет работать.

0 голосов
/ 11 ноября 2011

При нажатии на новую работу будет много копий данных. Запомни. Вы должны перегрузить оператор <для работы или меньше специализировать шаблон. </p>

Попробуйте это:

    class Job
{
public:
    int job_id;
    string job_description;
    int n_procs;    
    int n_ticks;


    Job(int job_id, string job_description, int n_procs, int n_ticks);
    Job(void);
    ~Job(void);
};


bool operator < (Job const& rhs, Job const& lhs)
{
    return rhs.n_ticks < lhs.n_ticks;
}

typedef vector<Job> Jobs;
typedef priority_queue<Job, Jobs, less<Job>> JobQueue;


Job job(1,"job 1", 1,2);
JobQueue jobs;

jobs.push(job);

Job const& topJop = jobs.top();
//do whatever with topTob
//remove it from the queue
job.pop();
0 голосов
/ 11 ноября 2011

см. Эту ссылку: http://www.cplusplus.com/reference/stl/priority_queue/pop/

Вы также найдете эту спецификацию:

template < class T, class Container = vector<T>,
       class Compare = less<typename Container::value_type> > class priority_queue;

Это означает (не пытаясь самостоятельно), что вы должны быть в состоянии сделать:

JobQueue jq;
jq.push(Job(1,"one",0,1));
jq.push(Job(2,"two",2,3));
Job top = jq.pop()

Пожалуйста, посмотрите определение и пример http://www.cplusplus.com/reference/stl/priority_queue

...