我只是实现了一个逻辑,其中一个整数在被排队到队列之前,搜索向量中的队列循环并且整数被排队到队列中具有最小大小的队列。以下代码显示了该操作。
#include <vector>
#include <queue>
std::vector<std::queue<int> > q
int min_index = 0;
std::size_t size = q.size();
for( i=0; i<size; i++){ //accessing loop of queues
if(q[min_index].size() > q[i].size())
min_index = i; // Now q[min_index] is the shortest queue
}
q[min_index].push(int)
现在另外我想扩展我的范例,条件是整数应该继续在最短队列中排队,条件为真,最短队列的大小小于或等于队列循环中任何其他队列的大小。
想做类似下面显示的代码
#include <vector>
#include <queue>
std::vector<std::queue<int> > q
int min_index = 0;
std::size_t size = q.size();
for( i=0; i<size; i++){ //accessing loop of queues
if(q[min_index].size() > q[i].size())
min_index = i
while(q[min_index].size <= q[some_other_index].size() )
{
q[min_index].push(int);
}
我想我应该找到循环的连续最小值并在while循环中进行比较?但我不知道如何去寻找连续的最小值。
这个问题的延续,因为我没有清楚地问这个问题 comparing queue sizes in a vector
答案 0 :(得分:2)
如果在循环过程中未更改其他队列,则可以使用初始最小搜索来查找两个最短队列。类似的东西:
std::size_t min_index = 0;
std::size_t second_shortest_index = 0;
std::size_t size = q.size();
for( i=0; i<size; i++){ //accessing loop of queues
if(q[min_index].size() > q[i].size()) {
second_shortest_index = min_index;
min_index = i; // Now q[min_index] is the shortest queue
} else if (q[second_shortest_index].size() > q[i].size()) {
second_shortest_index = min_index;
}
}
然后,您可以使用second_shortest_index
作为some_other_index
。这仍然需要您在达到该限制时搜索新的第二最短队列(因为可能有多个最短或第二短的元素)
如果您可以重新排序vector<queue>
或使用带有间接比较器的索引向量,则可以使用std::make_heap
和相关函数来更轻松地跟踪最小队列。