0

スレッドごとに 1 つのキューを持つパラダイムがあります。次のコードで行った、キューの数の中から最小サイズのキューを見つけたいと思います。

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 の最小の queue だと思います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 に答える