两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

1. 簡介

優(yōu)先隊列是一種極其特殊的隊列,他與標準的隊列使用線性結構進行計算不同,優(yōu)先隊列的底層是以散列的狀態(tài)(非線性)表現(xiàn)的,他與標準的隊列有如下的區(qū)別,標準的隊列遵從嚴格的先進先出,優(yōu)先隊列并不遵從標準的先進先出,而是對每一個數(shù)據(jù)賦予一個權值,根據(jù)當前隊列權值的狀態(tài)進行排序,使得權值最大(或最?。┑挠肋h排在隊列的最前面。

2. 相關頭文件

由于其屬于隊列的一種,因此可以直接使用隊列的頭文件#include<queue>

3. 優(yōu)先隊列的初始化

priority_queue<T, Container, Compare>
priority_queue<T>        //直接輸入元素則使用默認容器和比較函數(shù)

與往常的初始化不同,優(yōu)先隊列的初始化涉及到一組而外的變量,這里解釋一下初始化:

a) T就是Type為數(shù)據(jù)類型

b) Container是容器類型,(Container必須是用數(shù)組實現(xiàn)的容器,比如vector,deque等等,但不能用 list。STL里面默認用的是vector)

c) Compare是比較方法,類似于sort第三個參數(shù)那樣的比較方式,對于自定義類型,需要我們手動進行比較運算符的重載。與sort直接Bool一個函數(shù)來進行比較的簡單方法不同,Compare需要使用結構體的運算符重載完成,直接bool cmp(int a,int b){  return a>b; } 這么寫是無法通過編譯的。

使用的舉例有:

struct cmp
{ //這個比較要用結構體表示
    bool operator()(int &a, int &b) const
    {
        return a > b;
    }
};
 
priority_queue<int,vector<int>,cmp> q;    //使用自定義比較方法
priority_queue<int> pq;

4. 常用接口

我們預先通過priority_queue <int> q創(chuàng)建了一個隊列,命名為q,方便舉例。

a)大小size()

返回隊列元素的個數(shù)

函數(shù)原型:size_type size() const;

cout<<q.size()<<endl;   //直接返回隊列中元素的個數(shù)

b) 入隊push()

進行入隊操作,在隊尾處進行插入

函數(shù)原型:void push (const value_type& val);

q.push(100);

c) 出隊pop()

進行出隊操作,在對頭出進行彈出

函數(shù)原型:void pop();

q.pop();

d) 訪問隊頭元素top()

與標準隊列不同,優(yōu)先隊列只允許訪問隊頭元素,不允許訪問其余的數(shù)據(jù),由于堆的特殊性質,堆頂元素的優(yōu)先權最高(或者最低),訪問其余元素沒有意義,因此,優(yōu)先隊列只允許訪問隊頭元素,這和棧的訪問類型類似所以使用棧訪問棧頂?shù)拿鹴op

函數(shù)原型是:

reference& top();

const_reference& top() const;

 cout<<q.top()<<endl;

e) 判空empty()

返回一個bool類型的值,只存在真和假,當隊列為空時為真,不為空時為假

函數(shù)原型

bool empty() const;

可以利用empty()進行隊列的遍歷操作,這里建議先使用初始化函數(shù)將隊列進行復制,否則遍歷之后隊列就為空了。

  while(q.empty()){
        cout<<q.pop()<<endl;
        q.pop();
    }

5.實例代碼

可以通過這個代碼進行參考,可以看的輸出的結果是順序的。

#include <queue>
#include <iostream>
using namespace std;
struct cmp
{ //這個比較要用結構體表示
    bool operator()(int &a, int &b) const
    {
        return a > b;
    }
};
int main()
{
    priority_queue<int, vector<int>, cmp> q;
    for (int i = 1; i <= 5; i++)
    {
        q.push(i * 10);
        cout << "push element " << i << endl;
    }
    q.push(15);
    q.push(4);
    int i = 1;
    while (!q.empty())
    {
        int temp = q.top();
        q.pop();
        cout << "No " << i++ << " element is: " << temp << endl;
    }
    return 0;
}

輸出:

push element 1
push element 2
push element 3
push element 4
push element 5
No 1 element is: 4
No 2 element is: 10
No 3 element is: 15
No 4 element is: 20
No 5 element is: 30
No 6 element is: 40
No 7 element is: 50

6.相關配套習題

優(yōu)先隊列和優(yōu)化圖論的締結特斯拉算法有很大的聯(lián)系,優(yōu)先隊列屬于一種比較高級的數(shù)據(jù)結構,可以試著利用優(yōu)先隊列做一些排序題目,等到有基礎之后再進行高級算法的訓練。

1169題

作業(yè):
1169 絕對值排序
點贊(0)

C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習題和答疑,點擊了解:

一點編程也不會寫的:零基礎C語言學練課程

解決困擾你多年的C語言疑難雜癥特性的C語言進階課程

從零到寫出一個爬蟲的Python編程課程

只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程

信息學奧賽或C++選手的 必學C++課程

藍橋杯ACM、信息學奧賽的必學課程:算法競賽課入門課程

手把手講解近五年真題的藍橋杯輔導課程

Dotcpp在線編譯      (登錄可減少運行等待時間)