c ++ вставка в вектор очередей

0

Я пытаюсь сделать это, чтобы вставить Продукт в вектор очередей, но он заполняется только один за другим, пока не будет заполнен набор продуктов.

Как я могу сделать метод вставки баланса продуктов в хранилище и не заполнять один за другим до максимальной емкости?

Вектор очередей:

vector < queue <Product*> > depFresh;

Существует наследие между моим классом депозита и классом DepositFresh. Мой DepositFresh унаследовал все поля, объявленные в моем классе "Депозит". В своем классе "Депозит" я заявил:

Class Deposit {
private:
    int number_Palets_Storage;
    int max_Capacity_Palet;
    int total_Area_Deposit;
public:
    virtual void insertProduct(const Produto *produto) =0;
}

Мой класс DepositFresh содержит следующий метод:

Вставка метода:

void DepositFresh::insertProduct(const Product *product) {
        if (depFresh.size() == getNumber_Palets_Storage())
            for (int i = 0; i < depFresh.size(); i++) {
                if (depFresh.at(i).size() < getMax_Capacity__Palet())
                    depFresh.at(i).push(product->clone());
                break;
            }
}
Теги:
vector
insert
queue

3 ответа

0

Если я понимаю вашу проблему, вы хотите вставить продукт в очередь с наименьшей мощностью в своем векторе. Почему бы не искать наименьший размер и нажать соответственно?

#include <vector>
#include <queue>
#include <iostream>
#include <string>
#include <algorithm>

class myContainer 
{
private:
    std::vector< std::queue< long > > depFresh;
public:
    myContainer( size_t queue_cnt ) : depFresh( queue_cnt )
    {
    }
    void insertProduct( long product )
    {
        auto iter = std::min_element( depFresh.begin(), depFresh.end(), []( std::queue< long > & l, std::queue< long > & r ){ return l.size() < r.size(); } );
        iter->push( product );
    }
    void dump()
    {
        size_t index = 0;
        std::cout << "---------------------------" << std::endl;
        for( const auto & o : depFresh )
        {
            std::cout << ++index << " has size " << o.size() << '\n';
        }
        std::cout << "---------------------------" << std::endl;
    }
};

int main()
{
    myContainer container( 5 );
    for( long x = 0; x < 40; ++x )
    {
        container.insertProduct( x ); 
        container.dump();
    }
}

Это дает:

---------------------------
1 has size 1
2 has size 0
3 has size 0
4 has size 0
5 has size 0
---------------------------
---------------------------
1 has size 1
2 has size 1
3 has size 0
4 has size 0
5 has size 0
---------------------------
---------------------------
1 has size 1
2 has size 1
3 has size 1
4 has size 0
5 has size 0
---------------------------
---------------------------
1 has size 1
2 has size 1
3 has size 1
4 has size 1
5 has size 0
---------------------------
---------------------------
1 has size 1
2 has size 1
3 has size 1
4 has size 1
5 has size 1
---------------------------
---------------------------
1 has size 2
2 has size 1
3 has size 1
4 has size 1
5 has size 1
---------------------------
---------------------------
1 has size 2
2 has size 2
3 has size 1
4 has size 1
5 has size 1
---------------------------
---------------------------
1 has size 2
2 has size 2
3 has size 2
4 has size 1
5 has size 1
---------------------------
---------------------------
1 has size 2
2 has size 2
3 has size 2
4 has size 2
5 has size 1
---------------------------
---------------------------
1 has size 2
2 has size 2
3 has size 2
4 has size 2
5 has size 2
---------------------------
---------------------------
1 has size 3
2 has size 2
3 has size 2
4 has size 2
5 has size 2
---------------------------
---------------------------
1 has size 3
2 has size 3
3 has size 2
4 has size 2
5 has size 2
---------------------------
---------------------------
1 has size 3
2 has size 3
3 has size 3
4 has size 2
5 has size 2
---------------------------
---------------------------
1 has size 3
2 has size 3
3 has size 3
4 has size 3
5 has size 2
---------------------------
---------------------------
1 has size 3
2 has size 3
3 has size 3
4 has size 3
5 has size 3
---------------------------
---------------------------
1 has size 4
2 has size 3
3 has size 3
4 has size 3
5 has size 3
---------------------------
---------------------------
1 has size 4
2 has size 4
3 has size 3
4 has size 3
5 has size 3
---------------------------
---------------------------
1 has size 4
2 has size 4
3 has size 4
4 has size 3
5 has size 3
---------------------------
---------------------------
1 has size 4
2 has size 4
3 has size 4
4 has size 4
5 has size 3
---------------------------
---------------------------
1 has size 4
2 has size 4
3 has size 4
4 has size 4
5 has size 4
---------------------------
---------------------------
1 has size 5
2 has size 4
3 has size 4
4 has size 4
5 has size 4
---------------------------
---------------------------
1 has size 5
2 has size 5
3 has size 4
4 has size 4
5 has size 4
---------------------------
---------------------------
1 has size 5
2 has size 5
3 has size 5
4 has size 4
5 has size 4
---------------------------
---------------------------
1 has size 5
2 has size 5
3 has size 5
4 has size 5
5 has size 4
---------------------------
---------------------------
1 has size 5
2 has size 5
3 has size 5
4 has size 5
5 has size 5
---------------------------
---------------------------
1 has size 6
2 has size 5
3 has size 5
4 has size 5
5 has size 5
---------------------------
---------------------------
1 has size 6
2 has size 6
3 has size 5
4 has size 5
5 has size 5
---------------------------
---------------------------
1 has size 6
2 has size 6
3 has size 6
4 has size 5
5 has size 5
---------------------------
---------------------------
1 has size 6
2 has size 6
3 has size 6
4 has size 6
5 has size 5
---------------------------
---------------------------
1 has size 6
2 has size 6
3 has size 6
4 has size 6
5 has size 6
---------------------------
---------------------------
1 has size 7
2 has size 6
3 has size 6
4 has size 6
5 has size 6
---------------------------
---------------------------
1 has size 7
2 has size 7
3 has size 6
4 has size 6
5 has size 6
---------------------------
---------------------------
1 has size 7
2 has size 7
3 has size 7
4 has size 6
5 has size 6
---------------------------
---------------------------
1 has size 7
2 has size 7
3 has size 7
4 has size 7
5 has size 6
---------------------------
---------------------------
1 has size 7
2 has size 7
3 has size 7
4 has size 7
5 has size 7
---------------------------
---------------------------
1 has size 8
2 has size 7
3 has size 7
4 has size 7
5 has size 7
---------------------------
---------------------------
1 has size 8
2 has size 8
3 has size 7
4 has size 7
5 has size 7
---------------------------
---------------------------
1 has size 8
2 has size 8
3 has size 8
4 has size 7
5 has size 7
---------------------------
---------------------------
1 has size 8
2 has size 8
3 has size 8
4 has size 8
5 has size 7
---------------------------
---------------------------
1 has size 8
2 has size 8
3 has size 8
4 has size 8
5 has size 8
---------------------------
</pre>

0

Имо проще всего хранить новые объекты в круговом режиме. Для этого вы можете сохранить индекс, который запоминает, где вы что-то сохраняли. Как только вы храните что-то в очереди, вы можете сделать что-то вроде

insertion_index = (insertion_index + 1) % v.size();

При следующем вызове следующая очередь будет хранить следующий продукт.

Это самая простая стратегия балансировки, о которой можно подумать, но также можно использовать приоритетную очередь вместо вектора, чтобы всегда вставлять в очередь с наименьшими элементами, используя размер очереди как приоритет (low = высокий приоритет).

0

Вы пытаетесь вставить Продукт во все очереди, пока они не будут заполнены? звучит как

int i = 0;
while(true)
{
 if (depFresh.at(i).size() < getMax_Capacity__Palet())
                    depFresh.at(i).push(product->clone());
 else
     break;
i = (i + 1) / depFresh.size();
}

Но почему нет

for(int i = 0; i < depFresh.size(); ++i)
    for (int j = 0; j < getMax_Capacity__Palet() ; ++j)
       depFresh.at(i).push(product->clone());
  • 0
    Ваш второй пример использует, вероятно, следует использовать i для итерации в одном из циклов.
  • 0
    Полностью :) отредактировано :)
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню