Установите максимальный размер очереди с приоритетами повышения - PullRequest
0 голосов
/ 29 мая 2019

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

Я попытался использовать функцию резерва (element_count).В документе сказано, что функция используется для «резервирования места для элементов element_count».Но это не сработало так, как я думал, это будет

Это пример кода, который я пишу.Это НЕ ИСПОЛЬЗОВАНИЕ СЛУЧАЯ.

int main()
{
        int maxSize = 2; // Priority Queue (pq) is expected to hold a maximum of 2 elements at any time
        boost::heap::priority_queue<int> pq; // Declaration
        pq.reserve(maxSize); // I assumed this would reserve space only for 2 elements and anything more would over write the existing ones based on comparison
        pq.push(3);
        pq.push(2);
        pq.push(1); // Push should fail
        cout << "Size = " <<pq.size() << " Max Size = " << (int)pq.max_size(); 
        for (int i=0; i<maxSize; i++)
        {
                int a = pq.top();
                pq.pop();
                cout << a <<"\n";
        }
        return 0;
}

Я ожидал, что результатом будет:
Размер = 2 Максимальный размер = 2
3
2

Но чтоЯ получаю это:

Размер = 3 Максимальный размер = -1
3
2

Чего мне не хватает?

1 Ответ

0 голосов
/ 29 мая 2019

reserve не работает так, как вы думаете. Он просто предварительно выделяет (резервирует) место для предметов. Если будет добавлено больше предметов, чем было зарезервировано, это увеличит вместимость новых предметов.

...