在最小大小队列中排队
Enqueue in a minimum size queue
我有一个范例,每个线程有一个队列。我希望在队列数量中找到最小大小的队列,我用下面的代码完成了。
std::vector<std::queue<task> > q;
int min_value = INT_MAX;
std::size_t size = q.size();
for( i=1; i<size; i++){ //accessing loop of queues
if(min_value > q[i].size())
min_value = q[i].size();
}
现在我希望在这里做一个额外的操作,每次只有最小大小的队列(从上面的代码中找到)应该进入任务队列。
q.get (min_value)
q.push(task) // will this one, does the required operation?
我想你要找的是向量q
中最小的队列。如果是,你可以这样做:
auto cmp = [](std::queue<task> const & a, std::queue<task> const & b) {
return a.size() < b.size();
};
//note q is a std::vector of std::queue
auto min_queue = std::min_element(q.begin(), q.end(), cmp);
min_queue->push(item);//min_queue is the iterator to the smallest queue
另外,我相信你的代码,i=1
是一个错误,我认为应该是i=0
,如果你想搜索整个向量,即从开始到结束。如果您真的指的是i=1
,那么您必须这样做:
auto min_queue = std::min_element(q.begin() + 1, q.end(), cmp);
希望对你有帮助。
相关文章:
- boost::进程间消息队列引发错误
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- Android NDK传感器向事件队列报告奇怪的间隔
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 按对象的特定方法按升序排列的C++优先级队列
- 使用2个键的cpp-stl::优先级队列排序不正确
- 我是否需要在下一次转移时将所有权*转移回转移队列
- 在一个读写器队列中,我可以用volatile替换原子吗
- 为什么我的多线程作业队列崩溃
- 尝试将lambda函数放在队列中时出现一般分配器错误(可能是与unique_ptr有关的错误)
- 使用"Task"函数指针队列定义作业管理器
- 在c++队列中使用pop和visit实现线程安全
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 取消排队不适用于从双链表继承的队列类
- 我们可以在队列前面以 O(1) 时间复杂度排队一个元素吗?
- 队列类的取消排队方法"Aborted (core dumped)"错误
- 排队的事件数量?(Win32事件队列)
- 具有 O(1) 取消排队和 O(无论什么)排队的优先级队列
- 在优先级队列中取消排队
- 在最小大小队列中排队