C++中的優先隊列是一種特殊的隊列,其中的元素按照一定的優先級進行排序。元素的優先級由元素自身的比較函數確定。
下面是使用C++優先隊列的一般步驟:
包含頭文件:#include <queue>
聲明一個優先隊列對象:priority_queue<data_type> pq;
添加元素到隊列中:pq.push(element);
訪問隊列中的頂部元素:top_element = pq.top();
pq.pop();
注意事項:
默認情況下,優先隊列按降序排列,即最大的元素位于隊列的頂部。如果要按升序排列,則需要自定義比較函數。
如果使用自定義數據類型作為優先隊列的元素,需要重載比較函數(operator< 或 operator>())。
優先隊列可以包含重復元素。
以下是一個使用優先隊列的例子,其中存儲自定義的Book結構體,按照價格從高到低進行排序:
#include <iostream>
#include <queue>
using namespace std;
struct Book {
string title;
double price;
};
// 自定義比較函數
struct CompareBooks {
bool operator()(const Book& b1, const Book& b2) {
return b1.price < b2.price;
}
};
int main() {
priority_queue<Book, vector<Book>, CompareBooks> pq;
// 添加元素
pq.push({"Book 1", 9.99});
pq.push({"Book 2", 7.99});
pq.push({"Book 3", 12.99});
// 訪問隊列中的頂部元素
Book topBook = pq.top();
cout << "Top Book: " << topBook.title << ", Price: " << topBook.price << endl;
// 刪除隊列中的頂部元素
pq.pop();
// 訪問新的頂部元素
topBook = pq.top();
cout << "Top Book: " << topBook.title << ", Price: " << topBook.price << endl;
return 0;
}
輸出結果:
Top Book: Book 3, Price: 12.99
Top Book: Book 1, Price: 9.99