#c プライオリティキューの使い方の詳しい説明
プライオリティキューもキューなどのデータ構造の一種です。その動作はキューの先入れ先出しに限定されず、論理的に実行することもできます(最大値または最小値に従ってキューから出るなど)。 推奨学習: 通常のキューは先入れ先出しのデータ構造であり、要素はキューの最後に追加されて削除されます。行列の先頭から。 優先キューでは、要素に優先順位が与えられます。要素にアクセスすると、最も優先度の高い要素が最初に削除されます。プライオリティ キューには、先入れ最大出力の動作特性があります。 まず、ヘッダー ファイル #includetop はキューの先頭要素にアクセスします。 empty キューが空かどうかを確認します。定義:size はキュー内の要素の数を返します push 要素をキューの最後に挿入します (および並べ替えます) emplace 要素を適切な場所に構築してキューに挿入します pop キューの先頭にある要素をポップします 交換コンテンツを交換します
priority_queue
//升序队列 priority_queue <int,vector<int>,greater<int> > q; //降序队列 priority_queue <int,vector<int>,less<int> >q; //greater和less是std实现的两个仿函数(就是使一个类的使用看上去像一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了)
#include<iostream> #include <queue> using namespace std; int main() { //对于基础类型 默认是大顶堆 priority_queue<int> a; //等同于 priority_queue<int, vector<int>, less<int> > a; // 这里一定要有空格,不然成了右移运算符↓↓ priority_queue<int, vector<int>, greater<int> > c; //这样就是小顶堆 priority_queue<string> b; for (int i = 0; i < 5; i++) { a.push(i); c.push(i); } while (!a.empty()) { cout << a.top() << ' '; a.pop(); } cout << endl; while (!c.empty()) { cout << c.top() << ' '; c.pop(); } cout << endl; b.push("abc"); b.push("abcd"); b.push("cbd"); while (!b.empty()) { cout << b.top() << ' '; b.pop(); } cout << endl; return 0; }
4 3 2 1 0 0 1 2 3 4 cbd abcd abc 请按任意键继续. . .
#include <iostream> #include <queue> #include <vector> using namespace std; int main() { priority_queue<pair<int, int> > a; pair<int, int> b(1, 2); pair<int, int> c(1, 3); pair<int, int> d(2, 5); a.push(d); a.push(c); a.push(b); while (!a.empty()) { cout << a.top().first << ' ' << a.top().second << '\n'; a.pop(); } }
2 5 1 3 1 2 请按任意键继续. . .
#include <iostream> #include <queue> using namespace std; //方法1 struct tmp1 //运算符重载< { int x; tmp1(int a) {x = a;} bool operator<(const tmp1& a) const { return x < a.x; //大顶堆 } }; //方法2 struct tmp2 //重写仿函数 { bool operator() (tmp1 a, tmp1 b) { return a.x < b.x; //大顶堆 } }; int main() { tmp1 a(1); tmp1 b(2); tmp1 c(3); priority_queue<tmp1> d; d.push(b); d.push(c); d.push(a); while (!d.empty()) { cout << d.top().x << '\n'; d.pop(); } cout << endl; priority_queue<tmp1, vector<tmp1>, tmp2> f; f.push(b); f.push(c); f.push(a); while (!f.empty()) { cout << f.top().x << '\n'; f.pop(); } }
3 2 1 3 2 1 请按任意键继续. . .
以上がC++のプライオリティキューの使い方の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。