Data structures 如果主比较恰好相等,如何修改Min Heap insert and delete函数以接受第二个比较?

Data structures 如果主比较恰好相等,如何修改Min Heap insert and delete函数以接受第二个比较?,data-structures,comparison,heap,Data Structures,Comparison,Heap,下面我有一个用于最小堆的标准insert和delete函数,我需要做的是在两个函数中添加一个特例,当T.num比较恰好相等时,我需要比较首先弹出较低Ascii值的T.字母。如果没有注释是标准的插入和删除,添加注释部分将是我添加新功能的尝试,对于我来说,我不明白为什么它不起作用 void MinHeap<T>::insert(T& e) { int CurrNode = ++HeapSize; while(CurrNode != 1 && heap[Cu

下面我有一个用于最小堆的标准insert和delete函数,我需要做的是在两个函数中添加一个特例,当T.num比较恰好相等时,我需要比较首先弹出较低Ascii值的T.字母。如果没有注释是标准的插入和删除,添加注释部分将是我添加新功能的尝试,对于我来说,我不明白为什么它不起作用

void MinHeap<T>::insert(T& e)
{
  int CurrNode = ++HeapSize;
  while(CurrNode != 1 && heap[CurrNode/2].num >= e.num)
    { 
      /*
      if(heap[CurrNode/2].num == e.num)
        if(heap[CurrNode/2].letter <= e.letter)
          break;
      */
      heap[CurrNode] = heap[CurrNode/2];
      CurrNode /= 2;
    }
  heap[CurrNode] = e;
}

void MinHeap<T>::delet()
{  
      T LastNode = heap[HeapSize--];  
      int CurrNode = 1;
      int child = 2;
      while(child <= HeapSize)
        {
          if(child < HeapSize && heap[child].num >= heap[child+1].num)
           {
             /*
             if(heap[child].num == heap[child+1].num)
               if(heap[child].letter <= heap[child+1].letter)
                child--;
             */
             child++;
           }

          if(LastNode.num <= heap[child].num) 
          {
            /*
            if (LastNode.num == heap[child].num)
            {
              if (LastNode.letter <= heap[child].letter)
                break;
            }
            else
            */
            break;
          }    
          heap[CurrNode] = heap[child];
          CurrNode = child;
          child *= 2;
        }
      heap[CurrNode] = LastNode;
}
void MinHeap::insert(T&e)
{
int CurrNode=++HeapSize;
while(CurrNode!=1&&heap[CurrNode/2].num>=e.num)
{ 
/*
if(heap[CurrNode/2].num==e.num)

if(heap[CurrNode/2].letter您可以简单地重载
T
类型的比较运算符,如下所示:

bool operator >(const T &left, const T &right) {
  return left.num > right.num ||
         left.num == right.num && left.letter <= right.letter;
}
bool操作符>(常数T和左、常数T和右){
返回left.num>right.num||
left.num==right.num&&left.letter=e.num
with
heap[CurrNode/2]>e

最好避免在注释部分中出现这样的代码,因为这样做很快会使跟踪和调试变得混乱