亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++優先隊列如何使用

發布時間:2023-05-04 17:54:33 來源:億速云 閱讀:301 作者:iii 欄目:開發技術

這篇文章主要介紹了C++優先隊列如何使用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇C++優先隊列如何使用文章都會有所收獲,下面我們一起來看看吧。

優先隊列的基本概念

在計算機科學中,優先隊列是一種抽象數據類型,它與隊列相似,但是每個元素都有一個相關的優先級。在優先隊列中,當我們執行插入操作時,我們將元素插入到隊列中,并根據其優先級對其進行排序。在刪除操作中,我們會刪除優先級最高的元素,并把隊列進行重新排序。優先隊列通常使用堆來實現。

C++中的優先隊列是一個容器適配器(container adapter),它提供了一種在元素之間維護優先級的方法。使用C++優先隊列,你可以在隊列頭部添加新元素,并從隊列頭部移除元素。當添加元素時,它將根據元素的排序準則將其放置在適當的位置。

優先隊列的使用方法

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

#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來創建一個整數類型的優先隊列。接下來,我們使用push()方法向隊列中添加元素。在添加元素后,我們可以使用size()方法來檢查隊列的大小。我們還可以使用top()方法獲取隊列的頂部元素。

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

優先隊列元素的排序規則

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

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

#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的構造函數中添加了第三個參數std::greater。這表示我們正在使用降序排列。

元素的自定義排序

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

接下來是一個使用lambda表達式進行排序的示例:

#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的自定義結構體。接下來,我們使用lambda表達式定義了一個比較二元謂詞。第三個參數是我們自定義的二元謂詞。最后,我們創建了一個custom_struct類型的優先隊列,并在其構造函數中使用comp參數,這將使用我們剛剛定義的比較謂詞對元素進行排序。

優先隊列的時間復雜度

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

關于“C++優先隊列如何使用”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“C++優先隊列如何使用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

深圳市| 方城县| 柳河县| 张家港市| 沭阳县| 建宁县| 福安市| 宣城市| 台安县| 桃园市| 平南县| 禹城市| 绍兴市| 巩留县| 株洲市| 怀安县| 钟祥市| 福贡县| 双鸭山市| 勐海县| 巴青县| 巴彦淖尔市| 富源县| 金平| 瑞安市| 湘潭市| 清丰县| 新兴县| 石棉县| 洛隆县| 陆河县| 六安市| 建平县| 承德市| 麻江县| 泸溪县| 武强县| 特克斯县| 珠海市| 宝清县| 中江县|