0

我有一个范例,每个线程有一个队列。我希望在队列数量中找到最小大小的队列,我使用以下代码进行了操作。

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?
4

1 回答 1

2

我认为您正在寻找的是 vector 中最小的队列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);

希望有帮助。

于 2013-01-17T15:44:27.927 回答