Я пытаюсь реализовать свою собственную очередь приоритетов, которая делает то же самое, что и стандартная очередь приоритетов из STL.Элементы из очереди должны соответствовать порядку, и для этого я использовал функцию сравнения.В этом случае элементы из очереди сортируются по возрастанию по частоте, а функция сравнения возвращает разницу между частотой двух элементов.Если разница меньше 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 (), например, изменение ее возвращаемого типа, типа элементов и т. Д.