内联函数始终返回相同的值

时间:2018-05-30 20:25:51

标签: c++ queue priority-queue singly-linked-list

我正在尝试实现自己的优先级队列,它与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;类型等

0 个答案:

没有答案