我有一个范例,每个线程有一个队列。我希望找到队列数量中的最小大小队列,我使用以下代码。
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?
答案 0 :(得分:2)
我认为你要找的是向量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);
希望有所帮助。