1

我只是实现一个逻辑,其中一个整数之前被排入队列,搜索向量中的队列循环并将整数排入队列中具有最小大小的队列。以下代码显示了操作。

#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循环中进行比较?但我不知道如何继续寻找连续的最小值。

继续这个问题,因为我没有明确地 比较向量中的队列大小

4

1 回答 1

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相关函数更轻松地跟踪最小队列。

于 2013-02-15T16:06:28.133 回答