您的位置:首页 > 编程语言 > C语言/C++

c++stl的queue和priority_queue

2017-11-05 15:00 218 查看
1. 队列容器queue是一个先进先出(FirstIn
First Out,FIFO)的线性存储表,元素的插入只能在队尾,元素的删除只能在队首。

2. 入队:push()
 形式:q.push(1);

3. 出对:pop()
 形式:q.pop()  //是从队首出去

4. 读取队首元素:front()
 形式: cout<<q.front()<<endl;

5. 读取队尾元素:back()
  形式:cout<<q.back()<<endl;

6. 判断是否为空:empty()
  形式:cout<<q.empty();若为空返回1,否则返回0

7. 队列当前元素的数目:size()
 形式:cout<<q.size()<<endl;

[b]优先队列容器priority_queue[/b]
1.优先队列容器priority_queue与队列一样,只能从队尾插入元素,从队首删除元素。但它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按先进先出的原则进行,而是将当前队列中最大的元素出队。这点类似于给队列里的元素进行了由大到小的顺序排序。元素的比较规则默认按元素的值由大到小排序;当然,可以重载“<”操作符来重新定义比较规则。也可以重载“()”重新定义比较规则。

      
声明的头文件为#include<queue>。

2. 入队:push()  形式:pq.push(1);

3. 出队:pop()  形式:pq.pop();是从队首出去

4. 读取队首元素:top()  形式:cout<<pq.top();只有这一种形式,没有,cout<<pq.front();或者是cout<<pq.back();

5. 判断队列是否为空:empty()  形式:pq.empty();若为空返回1,否则返回0

6. 队列当前元素的数目:size()   形式:
cout<<pq.size()

7. 重载“<”操作符来定义优先级:

#include<queue>

#include<string>

#include<iostream>

using namespace std;

struct Info{

string name;

float score;

bool operator < (const Info &a) const

{

return a.score<score;//按score由小到大排列,如果要由大到小排列,使用“>”号即可。

}

};

int main()

{

priority_queue<Info> pq;

Info info;

info.name="Jack";

info.score=68.5;

pq.push(info);

info.name="Bomi";

info.score=18.5;

pq.push(info);

info.name="Peti";

info.score=90;

pq.push(info);

while(!pq.empty())

{

cout<<pq.top().name<<" : "<<pq.top().score<<endl;

pq.pop();

}

return 0;

}

8. 重载“()”操作符来定义优先级:

#include<queue>

#include<string>

#include<iostream>

using namespace std;

struct myComp{

bool operator() (const int &a,const int &b)

{

return a>b;
//由小到达用“>”,若由大到小用“<” 

}

};

int main()

{

priority_queue<int,vector<int>,myComp> pq;

pq.push(1);

pq.push(9);

pq.push(2);

pq.push(30);

while(!pq.empty())

{

cout<<pq.top()<<" ";

pq.pop();

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息