我正在为Qt编写线程池,因为QRunnable
无法处理新线程中的事件循环。
对STL不太熟悉,按优先级弹出()某些东西的最佳方法是什么?优先级可能应该是MyRunnable
imo的属性,但是在将可运行对象添加到队列时,我总是可以将该信息提供给STL容器。
最佳答案
不熟悉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();
关于c++ - STL容器按优先级弹出pop()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2706512/