Требование: У меня есть очереди Max-Priority с п элементов. Теперь я хочу, чтобы сохранить только м -Максимальных элементов (где м < = п) и падают остальные из очереди. Другими словами, я хочу обрезать очередь.Обрежьте приоритетной очереди
Как это достичь?
Один из способов, который я мог придумать это, вывода из м элементы и поместить их в другую очередь. Затем назначьте ссылку новой очереди на ссылку старой очереди.
public static PriorityQueue<int> TrimPQueue(PriorityQueue<int> paraQueue, int newSize)
{
if (newSize >= paraQueue.Count)
return paraQueue;
PriorityQueue<int> newQueue = new PriorityQueue<int>(PriorityQueueType.Maximum);
for (int i = 1; i < newSize + 1; i++)
{
int temp = paraQueue.Dequeue();
newQueue.Add(temp);
}
return newQueue;
}
Нет ли лучшего способа сделать это? Я бы предпочел, если есть способ обрезать рабочую очередь, не создавая новый объект-очередь.
Вы используете объект, так что вам не нужно возвращать PriorityQueue из этой функции ... я бы просто деактивировал элементы X, а затем класс, вызывающий эту функцию, мог бы использовать «обрезанную» очередь после этого –
Crasher
И когда вы узнаете это M? Можете ли вы просто вставить в то время как меньше, чем newSize? – Crasher
Спасибо за помощь Crasher :) Когда мы называем 'Dequeue()', мы ** упускаем ** ** максимальные ** m элементов, правильно? Я не хочу их бросать. Я хочу сбросить ** минимальные элементы ** m. – Dilini