我正在尝试实现自己的优先级队列,它与STL的标准优先级队列完全相同。队列中的元素必须遵守一个顺序,为此我使用了比较函数。对于这种情况,队列中的元素按其频率递增排序,而比较函数返回2个元素之间的差异。频率。如果差值小于0,我们找到了应该插入元素的位置,否则迭代会继续。
我的奋斗是,无论频率之间的差异如何,比较函数总是返回值0(例如,如果一个元素的频率等于2而另一个元素等于3,它们的差异为-1,但是关系函数将返回0 )。
以下是源代码:
#pragma once
#include"BinaryTree.h"
typedef int(*TRelation)(const BinaryTree& bt1, const BinaryTree& bt2);
inline int getPriority(const BinaryTree& bt1, const BinaryTree& bt2) {
return bt1.getFrequence() - bt2.getFrequence();
}
class PriorityQueue {
TRelation relation;
BinaryTree* first;
public:
PriorityQueue() {
relation = getPriority;
first = nullptr;
}
void add(BinaryTree* e) {
if (first == nullptr) {
first = e;
return;
}
//add at start
if (relation(*e, *first)<0)
{
BinaryTree *aux= first;
first = e;
e->next = aux;
return;
}
BinaryTree *pre=first ;
BinaryTree *current = first;
while (current!=nullptr && relation(*e, *current)>=0) {
pre = current;
current = current->next;
}
pre->next = e;
e->next = current;
}
我还尝试了不同的getPriority()函数实现,比如改变它的返回类型,元素&#39;类型等