最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

STL  priority_queue(優(yōu)先隊列)詳解

 更新時間:2016年10月26日 11:17:03   投稿:lqh  
這篇文章主要介紹了 STL priority_queue(優(yōu)先隊列)詳解的相關資料,需要的朋友可以參考下

構造,析構

priority_queue() //默認構造函數,生成一個空的排序隊列 

priority_queue(const queue&); //拷貝構造函數 

priority_queue(const Compare& comp);
//構造生成一個空的priority_queue對象,
//使用comp作為priority_queue的comparison 

priority_queue(const value_type* first, const value_type* last); 
//帶有兩個參數的構造函數, 
//使用默認的Comparison作為第三個參數 

priority_queue& operator=(const priority_queue &);  
//賦值運算符重載 

c.~priority_queue() //銷毀所有元素并釋放內存 

### 常用函數###

empty();//判斷是否為空 

push(Elem e);//隊列尾部增加一元素 

pop();//隊列頭部數據出隊 

top();//返回頭部數據 

size();//返回棧中元素個數 

### 改變排列順序###
priority_queue < Type, Container, Functional >
如果我們把后面?zhèn)z個參數缺省的話,優(yōu)先隊列就是大頂堆,
隊頭元素最大。在很多時候,我們需要的不一定是最大值,
也有可能是最小值。這是就需要我們來改變priority_queue中的順序。

方法有兩種:
           1.如果加入優(yōu)先隊列的是基本類型,那么我們就可以這樣,我們以int為例:

   //注意greater<int> >這之間有一個空格   
priority_queue<int, vector<int>, greater<int> >Q;  

           2.對于自定義數據類型的話,我們不論是要改變排序方式,還是不改變都要這樣 – 重載 小于( < ) 運算符:
因為,如果你不重載比較運算符的話,編譯器無法比較自定義數據類型的大小關系。然而又因為在priority_queue的內部,只需用到 小于號(<),所以我們只需要重載小于號即可。當然對于自定義數據類型來說,也是必須重載,否則將無法使用priority_queue。重載小于號,我們可以有兩種方式,一種用成員函數,一種使用友元函數(這里就不多說了,不會的同學,自己在好好復習復習C++)

### 優(yōu)先隊列的使用范例###

#include <queue> 
#include <list> 
#include <cstdio> 
using namespace std; 
/** 
 優(yōu)先級隊列的使用范例 
*/ 
int main(){ 
  //優(yōu)先隊列默認是使用vector作為容器 
  priority_queue<int> a; 
  // priority_queue<int,list<int>> b;//可以這樣定義,但無法使用 
  int i; 
  //壓入數據 
  for(i=0;i<10;i++){ 
   a.push(i*2-5); 
   //b.push(i);//編譯錯誤 
  } 
  printf("優(yōu)先隊列的大小=%d\n",a.size()); 
  while(!a.empty()){ 
    printf("%d\n",a.top()); 
    a.pop();//出隊 
  } 
  putchar('\n'); 
  return 0; 
} 

### 優(yōu)先隊列帶比較函數示例(針對結構體)###

下面程序是針對結構體的,對數據的比較是通過對結構體重載operator()。
程序功能是模擬排隊過程,每人有姓名和優(yōu)先級,優(yōu)先級相同則比較姓名,開始有5個人進入隊列,然后隊頭2個人出隊,再有3個人進入隊列,最后所有人都依次出隊,程序會輸出離開隊伍的順序

#include <queue> 
#include <cstring> 
#include <cstdio> 
using namespace std; 
/** 
 結構體 
*/ 
struct Node{ 
  char szName[20];//人名 
  int priority;//優(yōu)先級 
  //構造函數 
  Node(int nri, char *pszName){ 
    strcpy(szName, pszName); 
    priority = nri; 
  } 
}; 
/** 
 結構體的比較方法 改寫operator() 
*/ 
struct NodeCmp{ 
//重寫operator()方法,注意這里重寫的寫法,operator()(參數1,...) 
  bool operator()(const Node &na, const Node &nb){ 
    if (na.priority != nb.priority) 
      return na.priority <= nb.priority; 
    else 
      return strcmp(na.szName, nb.szName) > 0; 
  } 
}; 
/** 
 打印節(jié)點 
*/ 
void PrintfNode(Node na){ 
  printf("%s %d\n", na.szName, na.priority); 
} 
int main(){ 
  //優(yōu)先級隊列默認是使用vector作容器,底層數據結構為堆。 
  priority_queue<Node, vector<Node>, NodeCmp> a; 

  //有5個人進入隊列 
  a.push(Node(5, "小譚")); 
  a.push(Node(3, "小劉")); 
  a.push(Node(1, "小濤")); 
  a.push(Node(5, "小王")); 

  //隊頭的2個人出隊 
  PrintfNode(a.top()); 
  a.pop(); 
  PrintfNode(a.top()); 
  a.pop(); 
  printf("--------------------\n"); 

  //再進入3個人 
  a.push(Node(2, "小白")); 
  a.push(Node(2, "小強")); 
  a.push(Node(3, "小新")); 

  //所有人都依次出隊 
  while (!a.empty()){ 
    PrintfNode(a.top()); 
    a.pop(); 
  } 
  return 0; 
} 

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • C語言實現猜數字小游戲

    C語言實現猜數字小游戲

    這篇文章主要為大家詳細介紹了C語言實現猜數字小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 如何在C++中實現一個正確的時間循環(huán)器詳解

    如何在C++中實現一個正確的時間循環(huán)器詳解

    這篇文章主要給大家介紹了關于如何在C++中實現一個正確的時間循環(huán)器的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • C++實現LeetCode(130.包圍區(qū)域)

    C++實現LeetCode(130.包圍區(qū)域)

    這篇文章主要介紹了C++實現LeetCode(130.包圍區(qū)域),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • 利用C++實現計算機輔助教學系統(tǒng)

    利用C++實現計算機輔助教學系統(tǒng)

    我們都知道計算機在教育中起的作用越來越大。這篇文章主要為大家詳細介紹了如何利用C++編寫一個計算機輔助教學系統(tǒng),感興趣的可以了解一下
    2023-05-05
  • 使用matlab繪制七夕表白玫瑰花束

    使用matlab繪制七夕表白玫瑰花束

    又是一年七夕節(jié)要到了,每年一次直男審美MATLAB繪圖大賽開始了,于是今年對我之前寫的老代碼進行了點優(yōu)化組合,整了個花球變花束,感興趣的小伙伴可以動手試一試
    2023-08-08
  • 深入理解c++中char*與wchar_t*與string以及wstring之間的相互轉換

    深入理解c++中char*與wchar_t*與string以及wstring之間的相互轉換

    本篇文章是對c++中的char*與wchar_t*與string以及wstring之間的相互轉換進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C++的四種類型轉換

    C++的四種類型轉換

    這篇文章主要介紹了C++的四種類型轉換,有詳細的示例代碼展示,對于學習C++的同學有一定的參考價值,感興趣的同學可以參考本文
    2023-04-04
  • C語言各種操作符透徹理解上篇

    C語言各種操作符透徹理解上篇

    C 語言提供了豐富的操作符,有:算術操作符,移位操作符,位操作符,賦值操作符。讓我們通讀本篇來詳細了解吧
    2022-02-02
  • C語言測試n的階乘和x的n次方

    C語言測試n的階乘和x的n次方

    今天小編就為大家分享一篇關于C語言測試n的階乘和x的n次方,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • C語言基礎文件操作方式超全詳解建議收藏

    C語言基礎文件操作方式超全詳解建議收藏

    這篇文章主要為大家介紹了關于C語言文件操作方式的詳細總結,建議收藏隨用隨看,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10

最新評論

奈曼旗| 滁州市| 长沙市| 高要市| 凤山县| 呼伦贝尔市| 巴彦县| 定南县| 新疆| 广平县| 京山县| 天水市| 高安市| 交口县| 宜兰县| 吉安县| 临海市| 新邵县| 浪卡子县| 浮梁县| 乐安县| 侯马市| 巩留县| 深州市| 林西县| 田林县| 昌乐县| 阿瓦提县| 大余县| 达拉特旗| 台北市| 泸西县| 长武县| 嘉禾县| 凤翔县| 资中县| 南通市| 华坪县| 五常市| 平顶山市| 金沙县|