c 優先佇列的使用方法

2021-08-22 07:08:51 字數 1370 閱讀 8602

#include

#include

#include

using namespace std;

struct node

int priority;

int value;

};int main()

;//示例1

priority_queueqi;//普通的優先順序佇列,按從大到小排序

for(i = 0; i < len; i++)

qi.push(a[i]);

for(i = 0; i < len; i++)

return  0;

} 則定義優先順序的時候,直接在類中寫個friend 的操作符過載函式即可: 

class  node 

node( int  x):a(x){} 

friend   bool  operator<( const  node ne1, const  node ne2)//引數也可以為引用,值傳遞 

else  } 

}; 其中在c++primer第三版 中文版中關於操作符過載有如下描述:

"程式設計師只能為類型別或列舉型別的運算元定義過載操作符我們可以這樣來實現把重 

載操作符宣告為類的成員或者宣告為名字空間成員同時至少有乙個類或列舉型別的引數 

按值傳遞或按引用傳遞"

因此不可用指標型別的引數;

2、如果想定義乙個指標型別的優先佇列,那就不可這麼簡單的定義了,你需要自定義乙個自己的比較函式,在priority_queue的模板函式中,我們可以利用這樣乙個template, class _pr = less>模板,在我們的程式**中,則需要自己定義乙個類來定義第三個模板引數,如:

class  nodepointercomparer  

bool  operator ()( const  node* ne1,  const  node* ne2)  const   

};  

當然在這之前我們的類node要重新書寫 

class  node  

node( int  x):a(x){} 

bool  lessthan( const  node* pnode)  const   

};  

這樣在main函式中就可以定義指標型別的優先佇列了:

int  main()  

return  0; 

}  疑問之處:如果你使用第一種值傳遞的操作符過載,來實現第二種的指標型別優先佇列,是不會達到想要的結果的,個人理解是因為在指標型別的優先佇列中找「<」運算子的時候,過載的不是我們寫的值傳遞friend bool operator<(const node ne1,const node ne2)//

也就是沒有找到指標型別的"<"過載,所有不會達到優先佇列的效果。

c 優先佇列使用方法

定義友元函式,過載某定義的資料結構的 操作符號,以下是優先佇列中的最大堆的定義 預設為最小堆 elemetype資料結構中的num元素小的優先輸出 最小堆 過載小於符號,num最小的優先輸出 friend bool operator const elemtype e1,const elemtype ...

優先佇列使用方法

前幾天做哈夫曼的貪心,想自己模擬搞就是寫不對 於是弄了個優先佇列水過 乾脆總結下 標頭檔案 include 成員函式 empty true if the priority queue has no elements popremoves the top element of a priority q...

優先佇列使用方法

優先佇列的使用方法,在網上看了許多,這個很好 那麼何為優先佇列呢,在優先佇列中,元素被賦予優先順序,當訪問元素時,具有最高端優先順序的元素先被訪問。即優先佇列具有最高端先出的行為特徵。優先佇列在標頭檔案 include 中 其宣告格式為 priority queue ans 宣告乙個名為ans的整形...