C++函数队列 BFS的好帮手

来源:互联网 发布:oracle数据库设计实例 编辑:程序博客网 时间:2024/05/16 19:02
queue<类型>变量
先进先出
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 0deque<int>::iterator pos;int i;//使用assign()赋值  assign在计算机中就是赋值的意思for (i = 0; i < 20; ++i)ideq[i] = i;//输出dequeprintf("输出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);//输出dequeprintf("\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);elseprintf("find failed\n");//在头尾删除数据printf("\n在头尾删除数据...\n");ideq.pop_back();ideq.pop_front();//输出dequeprintf("\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;
0 0
原创粉丝点击