Встроенная функция всегда возвращает одно и то же значение - PullRequest
0 голосов
/ 30 мая 2018

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

...