#c
#c
Вопрос:
Я устал кодировать обычный приоритет. Теперь я хотел бы добавить в свой код еще 1 или 2 условия.
Вот мой текущий код обычного приоритета:
void queue::addToQueueList(int newPriority, double newFare, int custID)
{
node* newnode= new node;
newnode->priority= newPriority;
newnode->fare = newFare;
newnode->cusID = custID;
newnode->next= NULL;
if (front == NULL || newnode->priority < front->priority)
{
newnode->next = front;
front = newnode;
}
else
{
node* q = front;
node* p;
while (q->next != NULL amp;amp; q->next->priority <= newnode->priority)
{
q=q->next;
}
newnode->next = q->next;
q->next = newnode;
}
}
как я могу добавить в пример условия добавления, если найден тот же приоритет, сравните стоимость проезда. приоритетным будет наивысший тариф.
Спасибо
Комментарии:
1. Два шага: во-первых, извлеките одну функцию
bool compare(node constamp; n1, node constamp; n2)
из существующего кода, она должна возвращатьn1
, должна ли быть раньшеn2
. Затем расширьте эту функцию, чтобы учитывать стоимость проезда, когда два элемента имеют одинаковый приоритет, что, я полагаю, является тем, что вы хотите. Кроме того, у вас должен быть набор тестов, которые гарантируют, что вещь ведет себя так, как ожидалось. Я не даю никаких дополнительных подсказок, потому что это подозрительно похоже на домашнее задание, но, используя эту информацию плюс некоторые усилия самостоятельно, вы сможете решить эту проблему.2. Пожалуйста, отформатируйте и сделайте отступ в своем коде.
3. Привет, Ульрих Экхардт, спасибо .. =)
4. для «Гонок на орбите»: я считаю, что все здесь, чтобы помогать друг другу учиться. поэтому я надеюсь, что вы сможете дать более конструктивные комментарии, а не давать неясные отзывы. Спасибо.
Ответ №1:
Если я правильно понял, вам нужно следующее
#include <utility>
//...
void queue::addToQueueList(int newPriority, double newFare, int custID)
{
node* newnode= new node;
newnode->priority= newPriority;
newnode->fare = newFare;
newnode->cusID = custID;
newnode->next= NULL;
auto p = std::make_pair( newPriority, newFare );
if (front == NULL || p < std::make_pair( front->priority, front->fare ) )
{
newnode->next = front;
front = newnode;
}
else
{
node* q = front;
while (q->next != NULL amp;amp;
std::make_pair( q->next->priority, q->next->fare ) <= p)
{
q=q->next;
}
newnode->next = q->next;
q->next = newnode;
}
}
Также кажется, что утверждение
node* p;
может быть удален из функции.
Ответ №2:
Это то, что я сделал:
void queue::addToQueueList(int newPriority, double newFare, int custID)
{
node* newnode= new node;
newnode->priority= newPriority;
newnode->fare = newFare;
newnode->cusID = custID;
newnode->next= NULL;
if (front == NULL || newnode->priority < front->priority)
{
newnode->next = front;
front = newnode;
}
else
{
node* q = front;
node* p;
while (q->next != NULL amp;amp; q->next->priority <= newnode->priority)
{
p=q;
q=q->next;
}
bool chk = compare(q,newnode);
if(chk)
{
p->next = newnode;
newnode->next = q;
}
else
{
newnode->next = q->next;
q->next = newnode;
}
}
}
bool queue::compare(node* constamp; n1, node* constamp; n2)
{
bool check = false;
if(n1->priority == n2->priority)
{
if(n2->fare > n1->fare)
{
check = true;
}
}
return check;
}