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容器按优先级弹出()?的主要内容,如果未能解决你的问题,请参考以下文章

STL容器之优先队列(转)

STL容器 -- Priority_Queue

C++STL之stackqueue的使用和模拟实现+优先级队列(附仿函数)+容器适配器详解

STL之stack等容器适配器

详解C++ STL priority_queue 容器

STL - 关联容器