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

深入了解C++優(yōu)先隊列(priority_queue)的使用方法

 更新時間:2023年05月02日 10:29:47   作者:碼出世界的淡水魚  
在計算機科學(xué)中,優(yōu)先隊列是一種抽象數(shù)據(jù)類型,它與隊列相似,但是每個元素都有一個相關(guān)的優(yōu)先級。C++中的優(yōu)先隊列是一個容器適配器(container adapter),它提供了一種在元素之間維護優(yōu)先級的方法。本文帶你深入了解C++優(yōu)先隊列的使用方法,需要的可以參考下

優(yōu)先隊列的基本概念

在計算機科學(xué)中,優(yōu)先隊列是一種抽象數(shù)據(jù)類型,它與隊列相似,但是每個元素都有一個相關(guān)的優(yōu)先級。在優(yōu)先隊列中,當(dāng)我們執(zhí)行插入操作時,我們將元素插入到隊列中,并根據(jù)其優(yōu)先級對其進(jìn)行排序。在刪除操作中,我們會刪除優(yōu)先級最高的元素,并把隊列進(jìn)行重新排序。優(yōu)先隊列通常使用堆來實現(xiàn)。

C++中的優(yōu)先隊列是一個容器適配器(container adapter),它提供了一種在元素之間維護優(yōu)先級的方法。使用C++優(yōu)先隊列,你可以在隊列頭部添加新元素,并從隊列頭部移除元素。當(dāng)添加元素時,它將根據(jù)元素的排序準(zhǔn)則將其放置在適當(dāng)?shù)奈恢谩?/p>

優(yōu)先隊列的使用方法

在C++中,我們可以使用頭文件"queue"中的priority_queue來創(chuàng)建一個優(yōu)先隊列。接下來是一個簡單的代碼示例,它說明了如何使用priority_queue創(chuàng)建一個整數(shù)類型的隊列。

#include <iostream>
#include <queue>

int main() {
    std::priority_queue<int> pq;

    pq.push(1);
    pq.push(2);
    pq.push(3);
    
    std::cout << "Queue Size : " << pq.size() << std::endl;
    std::cout << "Top Element: " << pq.top() << std::endl;

    while(!pq.empty()) {
        std::cout << pq.top() << std::endl;
        pq.pop();
    }
    return 0;
}

在上面的代碼中,我們首先包含頭文件"queue",并使用std::priority_queue來創(chuàng)建一個整數(shù)類型的優(yōu)先隊列。接下來,我們使用push()方法向隊列中添加元素。在添加元素后,我們可以使用size()方法來檢查隊列的大小。我們還可以使用top()方法獲取隊列的頂部元素。

在while循環(huán)中,我們使用top()方法檢查頂部元素,并使用pop()方法從隊列中刪除它。

優(yōu)先隊列元素的排序規(guī)則

默認(rèn)情況下,C++優(yōu)先隊列使用std::less來確定哪個元素具有更高的優(yōu)先級。這意味著優(yōu)先隊列中的元素以升序排列。如果您想使用降序排列,您可以將std::greater用作參數(shù)。

接下來是一個降序排列的示例:

#include <iostream>
#include <queue>

int main() {
    std::priority_queue<int, std::vector<int>, std::greater<int>> pq;

    pq.push(3);
    pq.push(2);
    pq.push(1);
    
    std::cout << "Queue Size : " << pq.size() << std::endl;
    std::cout << "Top Element: " << pq.top() << std::endl;

    while(!pq.empty()) {
        std::cout << pq.top() << std::endl;
        pq.pop();
    }
    return 0;
}

在上述代碼中,我們向priority_queue的構(gòu)造函數(shù)中添加了第三個參數(shù)std::greater。這表示我們正在使用降序排列。

元素的自定義排序

有時,您可能需要使用自定義排序規(guī)則將元素插入到C++優(yōu)先隊列中。在這種情況下,您可以使用lambda表達(dá)式或者實現(xiàn)一個二元謂詞(類似于比較函數(shù))。

接下來是一個使用lambda表達(dá)式進(jìn)行排序的示例:

#include <iostream>
#include <queue>

struct custom_struct {
    int priority;
    std::string message;

    custom_struct(int priority_, std::string message_) : priority(priority_), message(message_) {}
};

int main() {
    auto comp = [](custom_struct a, custom_struct b) {return a.priority > b.priority;};
    std::priority_queue<custom_struct, std::vector<custom_struct>, decltype(comp)> pq(comp);

    pq.push(custom_struct(1, "Hello"));
    pq.push(custom_struct(2, "World"));
    pq.push(custom_struct(3, "Priority"));
    
    std::cout << "Queue Size : " << pq.size() << std::endl;
    std::cout << "Top Element: " << pq.top().message << std::endl;

    while(!pq.empty()) {
        std::cout << pq.top().message << std::endl;
        pq.pop();
    }
    return 0;
}

在上述代碼中,我們首先定義一個名為custom_struct的自定義結(jié)構(gòu)體。接下來,我們使用lambda表達(dá)式定義了一個比較二元謂詞。第三個參數(shù)是我們自定義的二元謂詞。最后,我們創(chuàng)建了一個custom_struct類型的優(yōu)先隊列,并在其構(gòu)造函數(shù)中使用comp參數(shù),這將使用我們剛剛定義的比較謂詞對元素進(jìn)行排序。

優(yōu)先隊列的時間復(fù)雜度

C++優(yōu)先隊列是使用堆來實現(xiàn)的。插入和刪除元素的時間復(fù)雜度為O(log(n)),其中n是隊列中的元素數(shù)。獲取隊列頂部元素的時間復(fù)雜度為O(1)。由于我們使用的是標(biāo)準(zhǔn)容器庫,所以這些時間復(fù)雜度是可以保證的。

總結(jié)

C++優(yōu)先隊列是一種非常有用的數(shù)據(jù)結(jié)構(gòu),它允許我們以有序的方式存儲和訪問元素。無論是從插入元素的角度還是從獲取頂端元素的角度來看,使用C++優(yōu)先隊列都比自己手動實現(xiàn)堆或者排序數(shù)組更加快速和便捷。掌握C++優(yōu)先隊列可以讓您更輕松地完成許多常見的編程任務(wù),并且可以提高您的編碼效率和代碼質(zhì)量。

到此這篇關(guān)于深入了解C++優(yōu)先隊列(priority_queue)的使用方法的文章就介紹到這了,更多相關(guān)C++ 優(yōu)先隊列內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ stack與queue模擬實現(xiàn)詳解

    C++ stack與queue模擬實現(xiàn)詳解

    這篇文章主要給大家介紹了關(guān)于c++stack與queue模擬實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • C語言的字符函數(shù)和字符串函數(shù)詳解

    C語言的字符函數(shù)和字符串函數(shù)詳解

    這篇文章主要為大家介紹了C語言的字符函數(shù)和字符串函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • C++中友元類和嵌套類使用詳解

    C++中友元類和嵌套類使用詳解

    友元是一種允許非類成員函數(shù)訪問類的非公有成員的一種機制??梢园岩粋€函數(shù)指定為類的友元,也可以把整個類指定為另一個類的友元,所謂嵌套類,就是在類中聲明的類。如下代碼中,類Inner就是一個嵌套類,類Outer是外圍類
    2022-08-08
  • 淺談Qt實現(xiàn)HTTP的Get/Post請求

    淺談Qt實現(xiàn)HTTP的Get/Post請求

    本文主要介紹了淺談Qt實現(xiàn)HTTP的Get/Post請求,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 利用C++實現(xiàn)最長公共子序列與最長公共子串

    利用C++實現(xiàn)最長公共子序列與最長公共子串

    這篇文章主要給大家介紹了如何利用C++實現(xiàn)最長公共子序列與最長公共子串,文章一開始就給大家簡單的介紹了什么是子序列,子串應(yīng)該比較好理解就不用多介紹了,人后通過算法及示例代碼詳細(xì)介紹了C++實現(xiàn)的方法,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • C++多重繼承及多態(tài)性原理實例詳解

    C++多重繼承及多態(tài)性原理實例詳解

    這篇文章主要介紹了C++多重繼承及多態(tài)性原理實例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • C++ OpenCV繪制簡易直方圖DrawHistImg

    C++ OpenCV繪制簡易直方圖DrawHistImg

    本文主要介紹了一個能繪制簡易直方圖的簡單函數(shù)DrawHistImg,可以幫助大家快速掌握繪制的原理,可以根據(jù)自己的創(chuàng)意對其進(jìn)行改善和補充。需要的朋友可以參考一下
    2021-12-12
  • C++自定義實現(xiàn)比較器

    C++自定義實現(xiàn)比較器

    這篇文章主要為大家詳細(xì)介紹了如何使用C++自定義實現(xiàn)比較器,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • QT實戰(zhàn)之實現(xiàn)圖片瀏覽系統(tǒng)

    QT實戰(zhàn)之實現(xiàn)圖片瀏覽系統(tǒng)

    這篇文章主要介紹了如何利用QT編寫一個圖片瀏覽系統(tǒng),可以支持自動播放,左右拖動切換,點擊列表切換,點擊按鈕切換等功能,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-04-04
  • C++實現(xiàn)循環(huán)隊列

    C++實現(xiàn)循環(huán)隊列

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)循環(huán)隊列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-01-01

最新評論

安化县| 体育| 噶尔县| 康平县| 额尔古纳市| 开化县| 长丰县| 冕宁县| 化德县| 龙胜| 股票| 施秉县| 潍坊市| 论坛| 夏津县| 五华县| 六盘水市| 左云县| 昌宁县| 石阡县| 射洪县| 邵阳市| 麟游县| 罗江县| 双桥区| 赤壁市| 宁南县| 宜兴市| 博客| 博乐市| 额尔古纳市| 黎城县| 都江堰市| 南丰县| 恭城| 百色市| 汽车| 莒南县| 永寿县| 视频| 项城市|