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;
}
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;
}
相关文章推荐
- C++STL的priority_queue用法总结
- C++ STL之priority_queue
- poj 1862 priority_queue
- 通过扩展 PriorityBlockingQueue 的 take() 实现任务定时触发
- STL之容器适配器:stack,queue , priority_queue
- STL系列之五 priority_queue 优先级队列
- PriorityQueue and Heap
- STL中的priority_queue
- priority_queue
- STL系列之五 priority_queue 优先级队列
- sort, priority_queue, set, map排序顺序
- 5_7 丑数(UVa136)<priority_queue的使用>
- STL priority_queue使用
- priority_queue的用法总结
- STL之priority_queue
- [C++] Stack / queue / priority_queue
- stl的heap和priority_queue的使用
- nyoj 547 水池加水 priority_queue优先级队列初体验
- priority_queue的用法
- C++的priority_queue实现最大堆