C++函数队列 BFS的好帮手
2015-07-14 16:11
666 查看
queue<类型>变量
先进先出
empty() 如果队列为空返回真
pop() 删除对顶元素
push() 加入一个元素
size() 返回优先队列中拥有的元素个数
top() 返回优先队列对顶元素
双向队列 deque
优先队列 按某特定条件出列
priority_queue<node>q
可以直接定义在结构体里面
先进先出
empty() 如果队列为空返回真
pop() 删除对顶元素
push() 加入一个元素
size() 返回优先队列中拥有的元素个数
top() 返回优先队列对顶元素
双向队列 deque
//双向队列 deque //by MoreWindows http://blog.csdn.net/morewindows #include <deque> #include <cstdio> #include <algorithm> using namespace std; int main() { deque<int> ideq(20); //Create a deque ideq with 20 elements of default value 0 deque<int>::iterator pos; int i; //使用assign()赋值 assign在计算机中就是赋值的意思 for (i = 0; i < 20; ++i) ideq[i] = i; //输出deque printf("输出deque中数据:\n"); for (i = 0; i < 20; ++i) printf("%d ", ideq[i]); putchar('\n'); //在头尾加入新数据 printf("\n在头尾加入新数据...\n"); ideq.push_back(100); ideq.push_front(i); //输出deque printf("\n输出deque中数据:\n"); for (pos = ideq.begin(); pos != ideq.end(); pos++) printf("%d ", *pos); putchar('\n'); //查找 const int FINDNUMBER = 19; printf("\n查找%d\n", FINDNUMBER); pos = find(ideq.begin(), ideq.end(), FINDNUMBER); if (pos != ideq.end()) printf("find %d success\n", *pos); else printf("find failed\n"); //在头尾删除数据 printf("\n在头尾删除数据...\n"); ideq.pop_back(); ideq.pop_front(); //输出deque printf("\n输出deque中数据:\n"); for (pos = ideq.begin(); pos != ideq.end(); pos++) printf("%d ", *pos); putchar('\n'); return 0; }
优先队列 按某特定条件出列
priority_queue<node>q
#include<iostream> #include<functional> #include<queue> #include<vector> using namespace std; struct cmp1 { bool operator () (int &a, int &b) { return a > b ; // 从小到大排序,值 小的 优先级别高 } }; struct cmp2 { bool operator () (int &a, int &b) { return a < b; // 从大到小 } }; struct number1 { int x; bool operator < (const number1 &a)const { return x > a.x; // 从小到大 ,x 小的 优先级别高 } }; struct number2 { int x; bool operator < (const number2 &a)const { return x < a.x; // 从大到小 ,x 大的优先级别高 } }; int a[] = {14,10,56,7,83,22,36,91,3,47,72,0}; number1 num1[] ={14,10,56,7,83,22,36,91,3,47,72,0}; number2 num2[] ={14,10,56,7,83,22,36,91,3,47,72,0}; int main() { priority_queue<int>que; // 采用默认优先级构造队列 从大到小。 priority_queue<int, vector<int>, cmp1 >que1; priority_queue<int, vector<int>, cmp2 >que2; priority_queue<int, vector<int>, greater<int> > que3; //functional 头文件自带的 priority_queue<int, vector<int>, less<int> > que4; //functional 头文件自带的 priority_queue<number1> que5; priority_queue<number2> que6; int i; for(i=0;a[i];i++) { que.push(a[i]); que1.push(a[i]); que2.push(a[i]); que3.push(a[i]); que4.push(a[i]); } for(i=0;num1[i].x;i++) que5.push(num1[i]); for(i=0;num2[i].x;i++) que6.push(num2[i]); printf("采用默认优先关系:\n(priority_queue<int>que;)\n"); printf("Queue 0:\n"); while(!que.empty()) { printf("%3d",que.top()); que.pop(); } puts(""); puts(""); printf("采用结构体自定义优先级方式一:\n(priority_queue<int,vector<int>,cmp>que;)\n"); printf("Queue 1:\n"); while(!que1.empty()) { printf("%3d",que1.top()); que1.pop(); } puts(""); printf("Queue 2:\n"); while(!que2.empty()) { printf("%3d",que2.top()); que2.pop(); } puts(""); puts(""); printf("采用头文件\"functional\"内定义优先级:\n(priority_queue<int, vector<int>,greater<int>/less<int> >que;)\n"); printf("Queue 3:\n"); while(!que3.empty()) { printf("%3d",que3.top()); que3.pop(); } puts(""); printf("Queue 4 :\n"); while(!que4.empty()) { printf("%3d",que4.top()); que4.pop(); } puts(""); puts(""); printf("采用结构体自定义优先级方式二:\n(priority_queue<number>que)\n"); printf("Queue 5:\n"); while(!que5.empty()) { printf("%3d",que5.top()); que5.pop(); } puts(""); printf("Queue 6:\n"); while(!que6.empty()) { printf("%3d",que6.top()); que6.pop(); } system("pause"); return 0; }
可以直接定义在结构体里面
friend bool operator(a,b) return a.a>b.a;
相关文章推荐
- 黑马程序员------C语言中常量的分类及其表示方法
- C++求解最大子矩阵之和
- c++builder 读写文件类
- c++ STL stack 内存布局简析
- Phone List(C++ vector容器)
- C++ STL deque 内存布局
- C++智能指针及其简单实现
- 黑马程序员------C语言的标识符的命名规则及其分类
- C++类内存分布
- C++学习笔记——函数
- c++ 字符检测 TCharacter
- 在C语言中除法运算为什么没有小数部分?
- c++面试宝
- c++ 智能指针
- 7.c语言中的数组介绍
- 6.c语言中的条件语句
- 5.c语言逻辑运算与算术运算
- C起源和版本
- STL vector swap 交换操作是这样的
- 4.c语言的进制转换