priority_queue 优先级队列的使用

来源:互联网 发布:php 超全局变量 编辑:程序博客网 时间:2024/05/19 05:29
       程序功能是模拟排队过程,每人有姓名和优先级,优先级相同则比较姓名,开始有5个人进入队列,然后队头2个人出队,再有3个人进入队列,最后所有人都依次出队,程序会输出离开队伍的顺序。      
#include <queue>#include <cstring>#include <cstdio>using namespace std;//结构体struct Node{char szName[20];int  priority;Node(int nri, char *pszName){strcpy(szName, pszName);priority = nri;}};//结构体的比较方法 改写operator()struct NodeCmp{bool operator()(const Node &na, const Node &nb){if (na.priority != nb.priority)return na.priority <= nb.priority;elsereturn strcmp(na.szName, nb.szName) > 0;}};void PrintfNode(Node &na){printf("%s %d\n", na.szName, na.priority);}int main(){//优先级队列默认是使用vector作容器,底层数据结构为堆。priority_queue<Node, vector<Node>, NodeCmp> a;//有5个人进入队列a.push(Node(5, "xiaotan"));a.push(Node(3, "xiaoliu"));a.push(Node(1, "xiaotao"));a.push(Node(5, "xiaowang"));//队头的2个人出队PrintfNode(a.top());a.pop();PrintfNode(a.top());a.pop();printf("--------------------\n");//再进入3个人a.push(Node(2, "xiaobai"));a.push(Node(2, "xiaoqiang"));a.push(Node(3, "xiaoxin"));//所有人都依次出队while (!a.empty()){PrintfNode(a.top());a.pop();}return 0;}

0 0
原创粉丝点击