簡體   English   中英

優先隊列作為C ++中的堆

[英]Priority queue as heap in C++

我知道也有類似的問題,但是遺憾的是,沒有一個問題真正符合我的問題……因此,我應該創建一個優先級隊列作為堆。 我們已經提供了一些代碼片段(而不是偽代碼)來使用,但是如果我打印樹,我將得不到正確的數字。

我目前正試圖將隨機數插入隊列並打印它們。 隊列元素是名為Queue_elem的自定義類。 這是我的插入功能:

void Queue::insert(Queue_elem item){

  this->container[number_elements] = item;
  if (this->number_elements > 0) this->upHeap();
  this->number_elements++;
}

number_elements是數組(容器)大小的計數器。 這是我的upHeap:

void Queue::upHeap(){
  for (int i = this->number_elements; i>=0; i = (i-1)/2) {
    int parent = (i-1)/2;
    if (this->container[i].getPriority() < this->container[parent].getPriority()) {
        swap(this->container[i], this->container[parent]);
    }
    break;
  }

}

就是這樣。 在我的主要內容中,我正在插入隨機值,並嘗試像這樣打印它們:

Queue que(11);

mt19937 rng;
rng.seed(random_device()());
uniform_int_distribution<std::mt19937::result_type> dist6(1,50);
for (int i = 0; i < 10; ++i) {
    Queue_elem tmp(dist6(rng));
    que.insert(tmp);
}

cout << que.container[0].getPriority() << endl;
for (int i = 0; i < 5;i++) {

    cout << que.container[(2*i)+1].getPriority() << endl;
    cout << que.container[(2*i)+2].getPriority() << endl;
}

所以我要逐個檢查樹以正確的順序打印數組,但這總是錯誤的...

如果需要,我也可以提供整個項目。 預先感謝一堆。

編輯:Queue_elem

class Queue_elem {
public:
    Queue_elem();
    Queue_elem(int prio);
    virtual ~Queue_elem();
    int getPriority();
    void setPriority(int prio);
    int getId();
private:
    int id;
    int priority;

};

編輯2:輸出是這樣的:

1
18
29
26
37
30
44
46
48 
49
0

我沒問題。 您顯示的輸出與此堆相對應:

              1
      18             29
  26      37     30      44
46  48  49

那是一個有效的最小堆。 每個子節點都大於其父節點。 請記住,在堆中,項目不一定要排序。

最后得到0的原因是因為您試圖打印沒有正確子節點的節點的正確子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM