C++ 按优先级将STL容器转换为pop()?

C++ 按优先级将STL容器转换为pop()?,c++,qt,stl,C++,Qt,Stl,我正在为Qt编写一个线程池,因为QRunnable不处理新线程中的事件循环 不太熟悉STL,按优先级弹出()内容的最佳方式是什么?优先级可能是MyRunnableimo的一个属性,但我可以在将runnable添加到队列时将该信息提供给STL容器。标准库具有std::Priority\u queue,顾名思义,通用优先级队列实现。标准库具有std::priority\u queue,顾名思义,它是一个通用优先级队列实现。由pop()提供。我假设您需要某种堆栈结构。我不确定如何使用堆栈语义实现这一点

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


不太熟悉STL,按优先级弹出()内容的最佳方式是什么?优先级可能是
MyRunnable
imo的一个属性,但我可以在将runnable添加到队列时将该信息提供给STL容器。

标准库具有
std::Priority\u queue
,顾名思义,通用优先级队列实现。

标准库具有
std::priority\u queue
,顾名思义,它是一个通用优先级队列实现。

pop()
提供。我假设您需要某种堆栈结构。我不确定如何使用堆栈语义实现这一点,但优先级问题可以通过
std::priority\u queue
通过
pop()
简单地解决,我假设您需要某种堆栈结构。我不确定如何使用堆栈语义来实现这一点,但优先级问题可以通过
std::priority\u queue
解决,不熟悉QT,但正如其他建议,使用
priority\u 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();
struct的优先级更高{
布尔运算符()(MyRunnable常量&l、MyRunnable常量&b)
{返回l.priority>r.priority;}
};
std::priority\u queueq;
...
q、 推送(任务1);
q、 推送(任务2);
q、 推送(任务3);
MyRunnable&highest=q.top();
最高的。运行();
q、 pop();

不熟悉QT,但根据其他建议,使用
优先级队列

您还需要一个函子来允许结构访问优先级信息并指定排序顺序

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();
struct的优先级更高{
布尔运算符()(MyRunnable常量&l、MyRunnable常量&b)
{返回l.priority>r.priority;}
};
std::priority\u queueq;
...
q、 推送(任务1);
q、 推送(任务2);
q、 推送(任务3);
MyRunnable&highest=q.top();
最高的。运行();
q、 pop();

但不要在多线程程序中使用非原子的
top
/
pop
组合。但不要在多线程程序中使用非原子的
top
/
pop
组合。+1。我不知道为什么我的答案比你的多:(他们似乎说了同样的话。)我不知道为什么我的答案比你的多。(他们似乎说了同样的话。