|
一、相關定義 優(yōu)先隊列容器與隊列一樣,只能從隊尾插入元素,從隊首刪除元素。但是它有一個特性,就是隊列中最大的元素總是位于隊首,所以出隊時,并非按照先進先出的原則進行,而是將當前隊列中最大的元素出隊。這點類似于給隊列里的元素進行了由大到小的順序排序。元素的比較規(guī)則默認按元素值由大到小排序,可以重載“<”操作符來重新定義比較規(guī)則。 二、priority_queue 基本操作: empty() ??如果隊列為空,則返回真 pop() 刪除對頂元素,刪除第一個元素 push() ? ??加入一個元素 size() ?返回優(yōu)先隊列中擁有的元素個數(shù) top() 返回優(yōu)先隊列對頂元素,返回優(yōu)先隊列中有最高優(yōu)先級的元素 在默認的優(yōu)先隊列中,優(yōu)先級高的先出隊。在默認的int型中先出隊的為較大的數(shù)。 頭文件: #include?<queue> ? 下面看最基本的用法:從大到小輸出#include <iostream>
#include<queue>
#include<algorithm>
using namespace std;
int main(){
priority_queue<int>que;//采用默認優(yōu)先級構造隊列
for(int i=0;i<10;i )
{
int x=rand();
que.push(x);
}
cout<<"采用默認優(yōu)先關系:"<<endl;
while(!que.empty())//從大到小的順序
{
cout<<que.top()<<" ";
que.pop();
}
cout<<endl;
return 0;
}
? ? 下面是按照從小到大輸出? greater的用法 #include <iostream>
#include<queue>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
priority_queue<int,vector<int>,greater<int> >que;//采用默認優(yōu)先級構造隊列
for(int i=0;i<10;i )
{
int x=rand();
que.push(x);
}
cout<<"采用greater的優(yōu)先關系:"<<endl;
while(!que.empty())//從小到大輸出
{
cout<<que.top()<<" ";
que.pop();
}
cout<<endl;
return 0;
}
? 下面看結構體的使用 #include <iostream>
#include<queue>
#include<algorithm>
#include<vector>
using namespace std;
struct number1
{
int x;//下面兩種都可以
/*
bool operator < (const number1 &a) const
{
return x>a.x;
}*/
friend bool operator < (number1 a,number1 b)
{
return a.x>b.x;//x小的優(yōu)先級大
}
};
int main()
{
priority_queue<number1>que;//
for(int i=0;i<10;i )
{
int x=rand();
number1 n;
n.x=x;
que.push(n);
}
cout<<"采用結構體定義的優(yōu)先關系:"<<endl;
while(!que.empty())//從小到大
{
cout<<que.top().x<<" ";
que.pop();
}
cout<<endl;
return 0;
}
? ? 來源:http://www./content-4-124401.html |
|
|