STL容器以pop()为优先级?

时间:2010-04-24 23:12:52

标签: c++ qt stl

我正在为Qt编写一个线程池,因为QRunnable不处理新线程中的事件循环。

对STL不太熟悉,优先选择pop()的最佳方法是什么?优先级应该是MyRunnable imo的属性,但是当将runnable添加到队列时,我总是可以将该信息提供给STL容器。

3 个答案:

答案 0 :(得分:4)

通过pop()我假设你想要某种堆栈结构。我不确定如何使用堆栈语义实现这一点,但优先级问题可以通过std::priority_queue简单地解决。

答案 1 :(得分:3)

标准库有std::priority_queue,顾名思义,它是一个通用的优先级队列实现。

答案 2 :(得分:2)

不熟悉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();