2010-11-26 3 views
1

У меня есть проблемы с приоритетной очереди:C++, приоритетная очередь, элементы не сортируются

std::priority_queue <NodePrio, std::vector<NodePrio>, sortNodesByPrio> PQ; 

где

struct NodePrio 
{ 
Node *node; 
double priority; 

NodePrio() : node(NULL), priority(0) {} 
NodePrio(Node *node_, double priority_) : node(node_), priority(priority_) {} 
}; 

и

class sortNodesByPrio 
{ 
public: 
    bool operator() (const NodePrio &n1, const NodePrio &n2) const; 
} 


bool sortNodesByPrio::operator() (const NodePrio &n1, const NodePrio &n2) const 
{ 
return n1.priority < n2.priority; 
} 

После неоднократно толкая новые элементы

PQ.push(NodePrio(node, distance)); 

и от любого момента времени они не отсортированные (см ниже) ... Я пытался отладить код, код компаратора многократно выполняется ...

Step1: 
push (node, 55.33); 

PQ: 
[0] 55.33 

Step2: 
push (node, 105.91); 

PQ: 
[0] 105.91 
[1] 55.33 

Step 3: 
push (node, 45.18); 

PQ: 
[0] 105.91 
[1] 55.33 
[2] 45.18 

Step 4: 
push (node, 70.44); 

PQ: 
[0] 105.91 
[1] 70.44 
[2] 45.18 
[3] 55.33 //Bad sort 
+0

Что вы подразумеваете под словом "они не отсортированы?" Можете ли вы опубликовать некоторые данные образца, которые вы вводите, и результат, когда вы выталкиваете все данные из очереди приоритетов? – 2010-11-26 18:30:33

+0

Можете ли вы привести пример или два ваших ввода и каково итоговое содержимое очереди? Кроме того, что вы пытались на пути отладки до сих пор? – suszterpatt 2010-11-26 18:32:12

ответ

0

Попробуйте изменить

return n1.priority() < n2.priority(); 

в

return n1.priority < n2.priority; 
+1

немой вопрос: что добавляет() к переменной? – 2010-11-26 18:39:31

7

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

Очередь приоритетов гарантирует, что при удалении из нее элементов (с использованием top() и pop()) элементы будут удалены в порядке приоритета. Элементы не сохраняются в порядке приоритета, они хранятся в куче.

Вы можете проконсультироваться со своей любимой книгой или сайтом по алгоритмам для получения дополнительной информации о том, как очередь приоритетов хранит свои элементы.

Смежные вопросы