STL容器按优先级弹出()?
Posted
技术标签:
【中文标题】STL容器按优先级弹出()?【英文标题】:STL container to pop() by priority? 【发布时间】:2010-04-24 23:12:51 【问题描述】:我正在为 Qt 编写一个线程池,因为 QRunnable
不处理新线程中的事件循环。
对 STL 不太熟悉,按优先级 pop() 的最佳方法是什么?优先级应该是MyRunnable
imo 的一个属性,但是在将runnable 添加到队列时,我总是可以将该信息提供给STL 容器。
【问题讨论】:
【参考方案1】:pop()
我假设您想要某种堆栈结构。我不确定如何使用堆栈语义来实现这一点,但可以通过 std::priority_queue
简单地解决优先级问题。
【讨论】:
【参考方案2】:标准库有std::priority_queue
,顾名思义,这是一个通用的优先级队列实现。
【讨论】:
+1。我不知道为什么我的回答比你的回答多:(他们似乎说同样的话。【参考方案3】:不熟悉 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();
【讨论】:
但不要在多线程程序中使用非原子top
/pop
组合。以上是关于STL容器按优先级弹出()?的主要内容,如果未能解决你的问题,请参考以下文章