//排列树的节点定义 struct node { int cl;//当前走过的路径长度 int id;//处理的第几个城市 int x[100];//记录当前路径,下标从1开始 node() {}//默认构造函数,不提供任何参数,即通常的结构体用法 node(int cl_, int id_) //结构体构造函数 { cl = cl_; id = id_; memset(x, 0, sizeof(x));//将x的所有元素初始化为0 } }; //用于构建最小堆 struct cl_cmp { //当前路径长度短的优先级高 bool operator()(node n1, node n2) { return n1.cl > n2.cl; } }; void bfs() { //选用最小堆 priority_queue<node, vector<node>, cl_cmp> q; //后面省略 }
priority_queue<node, vector<node>, cl_cmp> q; 中的三个参数时什么意思?cl_cmp重载的()运算符又是什么作用?
我在网上查了一下priority_queue的用法,才知道了堆、仿函数的概念。这篇介绍非常清楚的博文链接:https://blog.csdn.net/weixin_57761086/article/details/126802156 非常清晰地回答了上面我的几个疑问。
这里记录一下我学到的优先队列的概念和性质:
1. 优先队列是一种容器适配器,采用了堆这种数据结构,保证了第一个元素总是整个优先队列中最大的(或最小的)元素。
2. 优先队列默认使用vector作为底层存储数据的容器,即在vector上使用了堆算法将其中的元素构造成堆的结构。所以优先队列就是堆的一种实现。两者的实质相同,所以也可以说:优先队列是堆的一种别名。
- 队列 priority_queue 函数 priority queue队列priority_queue函数priority 队列priority_queue priority queue priority_queue函数priority方法 priority_queue函数priority queue priority_queue queue priority_queue priority priority_queue priority queue stl 容器 适配器priority_queue算法 题解 果子priority_queue容器 priority_queue priority queue